Android Studio If-Anweisung Spinner Item

  • Antworten:52
Fabian ASP
  • Forum-Beiträge: 46

22.01.2015, 10:41:14 via Website

Hallo.
Mein Problem ist:
Ich habe einen Spinner, der mit einem Array gefüllt ist. Nun will ich, wenn ein bestimmtes Item bei dem Drop-Down Menü ausgewählt wird, eine Aktion durchführen. Mein Lösungsansatz war : "
if(array.contains(0)){
TextLaden();
}
Passiert aber nichts :-(
Ich würde mich über Hilfe freuen! :-)
Mit freundlichen Grüßen

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.01.2015, 10:50:07 via App

Hallo,

du brauchst dafür eine onItemClick methode im einem click listener.
Dann weisst du welches Item geklickt wure (position)
über eine switch kannst du dann eine Aktion durchführen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

22.01.2015, 16:39:10 via Website

Danke für deine schnelle Antwort! :-)
Leider habe ich sehr wenig Erfahrung mit "onItemClick". Es wäre nett wenn du bzw. ein anderer hier ein Beispiel machen könnte.
Beispielsweise mit einem Spinner und ein Array z.B. die Planeten, "Jupiter", "Uranus", etc.. Und dann halt wenn man auf z.B. "Jupiter" klickt soll was passieren, z.B. "Passieren();" :D
Vielen Dank :-)

— geändert am 22.01.2015, 16:47:55

Antworten
Fabian ASP
  • Forum-Beiträge: 46

22.01.2015, 19:00:47 via Website

Vielen Dank für dein Engagement, aber trotzdem verstehe ich nur Bahnhof. Außerdem will ich etwas mit einer If-Anweisung machen und in dem Beispiel von deinem Link wird einfach nur der Text ausgegeben. Ich habe mir jetzt gedacht man könnte dieses "spinner1.getSelectedItem()" übernehmen und in die Klammern eine "0" einsetzen, damit er den ersten Eintrag nimmt, funktioniert aber auch nicht. Ich hoffe mir kann weiter geholfen werden :(
Vielen Dank.

Antworten
Rexxar
  • Forum-Beiträge: 2.563

23.01.2015, 07:44:40 via App

Nochmal vollständig...
myspinner.setOnClickListener(new onClickListener {
@Override
public void OnClick {
if (myspinner.getSelectedItem == 0)){
textladen();
}
}
}
ich garantiere nicht dafür dass das richtig ist, nur so aus dem Kopf geschrieben. Aber müsste so in die Richtung gehen.

— geändert am 23.01.2015, 07:46:01

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Fabian ASP
  • Forum-Beiträge: 46

23.01.2015, 15:46:17 via Website

Vielen Dank für deine Antwort Rexxar :-)
Wenn ich "==0" nehme kommt: Error:(58, 47) error: incomparable types: Object and int.
Wenn ich dann den Namen vom item schreibe, kommt zwar kein Fehler, passiert aber trotzdem nichts :(
Außerdem verstehe ich auch nicht, warum du mitttendrin "@Override" schreibst...
Mit freundlichen Grüßen.

Antworten
Sven R.
  • Forum-Beiträge: 1.904

23.01.2015, 15:47:37 via App

Ist das nicht der OnItemSelectedListener?! Dann wird dir schon sofort die Position oder so gegeben.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Fabian ASP
  • Forum-Beiträge: 46

23.01.2015, 15:48:36 via Website

Sven R.

Ist das nicht der OnItemSelectedListener?! Dann wird dir schon sofort die Position oder so gegeben.

Könntest du vielleicht ein Beispiel machen?

Antworten
Rexxar
  • Forum-Beiträge: 2.563

23.01.2015, 16:45:27 via App

Funktioniert genau wie der OnClickListener aus meinem Beispiel.

Eventuell musst du irgendwie schreiben
(Pseudocode, nur nen denkanstoß) if selected item == R.myitemlist.item1...

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Fabian ASP
  • Forum-Beiträge: 46

23.01.2015, 16:56:46 via Website

Rexxar

Funktioniert genau wie der OnClickListener aus meinem Beispiel.

Eventuell musst du irgendwie schreiben
(Pseudocode, nur nen denkanstoß) if selected item == R.myitemlist.item1...

Ich bin jetzt verwirrt :-D :(

Antworten
Fabian ASP
  • Forum-Beiträge: 46

23.01.2015, 17:21:50 via Website

Rexxar

Naja hast du die Items in einem Ressource File eingegeben also in einer XML?

ja, strings.xml

Antworten
Rexxar
  • Forum-Beiträge: 2.563

23.01.2015, 17:27:43 via App

Strings.XML :O Nein, da gehören die gar nicht hin bzw. nur deren Namen....
Du brauchst nen Menu Ressource File wo dann z.b.sowas drinsteht...

 item android:id="@+id/help"
          android:icon="@drawable/ic_help"
          android:title="@string/help" /
/menu

Ich musste alle Schrägstriche weg machen, sonst macht Markdown was es will. Baut bitte einfach eine Vernünftige Code Funktion ein APIT

— geändert am 23.01.2015, 17:31:40

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Sven R.
  • Forum-Beiträge: 1.904

23.01.2015, 17:48:06 via App

Jetzt haste was verwechselt. 😉 menu ist für Menüs und nicht für Spinner.

Ich mache heute Abend mal ein Beispiel.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Fabian ASP
  • Forum-Beiträge: 46

23.01.2015, 17:58:33 via Website

Sven R.

Jetzt haste was verwechselt. 😉 menu ist für Menüs und nicht für Spinner.

Ich mache heute Abend mal ein Beispiel.

Danke an alle :D
Ja das wäre echt nett von dir, danke :-)
Mit freundlichen Grüßen

Antworten
Rexxar
  • Forum-Beiträge: 2.563

23.01.2015, 18:54:11 via App

Sven R.

Jetzt haste was verwechselt. 😉 menu ist für Menüs und nicht für Spinner.

Ich mache heute Abend mal ein Beispiel.

Huch... Ich wusste nicht dass es sich da anders verhält. Tschuldigung :)

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Sven R.
  • Forum-Beiträge: 1.904

23.01.2015, 21:55:04 via Website

Der untenstehende Code ist nicht getestet worden; es geht ums Prinzip.

Mit Listener:

spinner.setOnItemSelectedListener(new OnItemSelectedlistener() {

public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {

String text = parent.getItemAtPosition(pos).toString();

//oder einfach was mit der Position "pos" machen

switch(pos) {

case 3:

//irgendwas machen

break;

default:
break;

}

//oder:

Toast.make...(... "Position: " + pos);

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
    //kommt eigentlich nicht vor, muss aber überschrieben werden
}

}
)

Oder ohne:

int pos = spinner.getSelectedItemPosition();

Dokumentation: Spinner welcher von AdapterView erbt.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Fabian ASP
  • Forum-Beiträge: 46

24.01.2015, 13:18:57 via Website

Sven R.

Der untenstehende Code ist nicht getestet worden; es geht ums Prinzip.

Mit Listener:

spinner.setOnItemSelectedListener(new OnItemSelectedlistener() {

public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {

String text = parent.getItemAtPosition(pos).toString();

//oder einfach was mit der Position "pos" machen

switch(pos) {

case 3:

//irgendwas machen

break;

default:
break;

}

//oder:

Toast.make...(... "Position: " + pos);

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
  //kommt eigentlich nicht vor, muss aber überschrieben werden
}

}
)

Oder ohne:

int pos = spinner.getSelectedItemPosition();

Dokumentation: [Spinner][1] welcher von [AdapterView][2] erbt.

[1]: http://developer.android.com/reference/android/widget/Spinner.html
[2]: http://developer.android.com/reference/android/widget/AdapterView.html

Vielen Dank für deine Hilfe, es bringt mich schon ein wenig weiter, aber er streicht mir die zeile
"spinner.setOnItemSelectedListener(new OnItemSelectedlistener()" falsch an. Er kennt irgendwie nicht "setOnItemSelectedListener" obwohl ich oben in den bibliotheken das implementiert habe. Aber das ging oben auch nur mit AdapterView.OnItemSelectedListener"...

Antworten
Sven R.
  • Forum-Beiträge: 1.904

24.01.2015, 13:43:53 via App

spinner muss natürlich auch deine Variable sein zu dem Spinner sein.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Fabian ASP
  • Forum-Beiträge: 46

24.01.2015, 14:23:43 via Website

Sven R.

spinner muss natürlich auch deine Variable sein zu dem Spinner sein.

Wie meinst du das? Von welchem Datentyp soll denn die Variable sein?:O

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.01.2015, 14:28:38 via Website

Du musst ja auch erstmal deine Variable Spinner definieren, so:

Spinner spinner = (Spinner)findViewById(R.Id.spinner);

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

24.01.2015, 15:17:13 via Website

Pascal P.

Du musst ja auch erstmal deine Variable Spinner definieren, so:

Spinner spinner = (Spinner)findViewById(R.Id.spinner);

Haha :-D Viele Anfänger-Fehler, sorry haha :D
Ok nun hab ich in der onCreate den Code:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView parent, View view, int position, long id) {
switch(position){
case 0 :
TextLaden();
break;
case 1:
TextLaden();
break;
case 2:
TextLaden();
default:
Toast.makeText(trainingsergebnisse.this, "Fehler", Toast.LENGTH_LONG).show();
break;
}
}
Aber im Emulator schmiert die App leider ab :-( irgendwelche Fehlerbehebungs-Lösungsvorschläge? :D

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.01.2015, 15:24:06 via Website

  1. Wenn du den Standart Emulator nutzt dann am besten nur mit HAXM, sonstige Emulatoren findest du hier: https://www.nextpit.de/forum/620628/android-emulatoren-fuer-entwickler
    Zudem kannst du die App auch auf deinem gerät testen.

  2. Es gibt einen Log namens LogCat da weren alle Fehler, Exceptions etc. geloggt.
    am besten du postest mal was bei dir als Fehler dadrinnen staht. Ohne Fehlerbeschreibung kann man schlecht helfen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

24.01.2015, 15:29:29 via Website

Pascal P.

  1. Wenn du den Standart Emulator nutzt dann am besten nur mit HAXM, sonstige Emulatoren findest du hier: https://www.nextpit.de/forum/620628/android-emulatoren-fuer-entwickler
    Zudem kannst du die App auch auf deinem gerät testen.

  2. Es gibt einen Log namens LogCat da weren alle Fehler, Exceptions etc. geloggt.
    am besten du postest mal was bei dir als Fehler dadrinnen staht. Ohne Fehlerbeschreibung kann man schlecht helfen.

Fehler:
01-24 09:15:19.707 1306-1306/net.bplaced.com E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.bplaced.com.trainingsergebnisse}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at net.bplaced.com.trainingsergebnisse.onCreate(trainingsergebnisse.java:50)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

24.01.2015, 16:27:29 via App

Fabian ASP

[...] Caused by: java.lang.NullPointerException
at net.bplaced.com.trainingsergebnisse.onCreate(trainingsergebnisse.java:50)
[...]

Da steht es ja. Eine Nullpointerexception in der OnCreate in Zeile 50 in der trainingsergebnisse.java. Was steht denn da?

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
LitteM
  • Forum-Beiträge: 141

24.01.2015, 16:29:21 via Website

Schau mal in der Zeile nach ;)

at net.bplaced.com.trainingsergebnisse.onCreate(trainingsergebnisse.java:50)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

24.01.2015, 18:10:04 via Website

Spinner spinner = (Spinner)findViewById(R.id.spinnerUebungen);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView parent, View view, int position, long id) {
switch(position){
case 0 :
TextLaden();
break; <- Zeile 50
case 1:
TextLaden();
break;

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.01.2015, 18:17:11 via Website

Hmm komsich, da ist eigentlich kein fehler.
Poste mal deinen kompletten Code vlt. erkennt man den ehler ja aus dem Zusammehnag mit anderen Methode etc.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

24.01.2015, 18:32:39 via Website

Pascal P.

Hmm komsich, da ist eigentlich kein fehler.
Poste mal deinen kompletten Code vlt. erkennt man den ehler ja aus dem Zusammehnag mit anderen Methode etc.

package net.bplaced.com;

import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class trainingsergebnisse extends ActionBarActivity implements AdapterView.OnItemSelectedListener, View.OnClickListener {

Spinner spinnerUebungen;
RadioButton rbBrust;
EditText etGewicht, etWiederholungen;
Button btnSpeichern, btnLaden;
TextView txtGewicht, txtWiederholungen;
SharedPreferences speicher;
SharedPreferences.Editor editor;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_trainingsergebnisse);

    getSupportActionBar().hide();

    spinnerUebungen = (Spinner) findViewById(R.id.spinnerUebungen);

    Toast.makeText(this, "Wähle links deine Muskel-Gruppe aus.", Toast.LENGTH_SHORT).show();

    rbBrust = (RadioButton) findViewById(R.id.rbBrust);
    etGewicht = (EditText) findViewById(R.id.etGewicht);
    etWiederholungen = (EditText) findViewById(R.id.etWiederholungen);
    btnSpeichern = (Button) findViewById(R.id.btnSpeichern);

    txtGewicht = (TextView)findViewById(R.id.txtGewicht);
    txtWiederholungen = (TextView)findViewById(R.id.txtWiederholungen);

    btnSpeichern.setOnClickListener(this);
    btnLaden.setOnClickListener(this);


    speicher = getApplicationContext().getSharedPreferences("datenGewicht1",0);
    editor = speicher.edit();

    Spinner spinner = (Spinner)findViewById(R.id.spinnerUebungen);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            switch(position){
                case 0 :
                    TextLaden();
                    break;
                case 1:
                    TextLaden();
                    break;
                case 2:
                    TextLaden();
                default:
                    Toast.makeText(trainingsergebnisse.this, "Fehler", Toast.LENGTH_LONG).show();
                    break;
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });




}









public void rbBrust (View brust){

    ArrayAdapter adapterBrust = ArrayAdapter.createFromResource(this, R.array.Uebungen_Brust, android.R.layout.simple_spinner_item);
    spinnerUebungen.setAdapter(adapterBrust);
    spinnerUebungen.setOnItemSelectedListener(this);
    TextLaden();



}

public void rbRuecken (View ruecken){

    ArrayAdapter adapterRuecken = ArrayAdapter.createFromResource(this, R.array.Uebungen_Ruecken, android.R.layout.simple_spinner_item);
    spinnerUebungen.setAdapter(adapterRuecken);
    spinnerUebungen.setOnItemSelectedListener(this);
    TextLaden();

}

public void rbSchultern (View schultern){

    ArrayAdapter adapterSchultern = ArrayAdapter.createFromResource(this, R.array.Uebungen_Schultern, android.R.layout.simple_spinner_item);
    spinnerUebungen.setAdapter(adapterSchultern);
    spinnerUebungen.setOnItemSelectedListener(this);
    TextLaden();

}

public void rbBizeps (View bizeps){

    ArrayAdapter adapterBizeps = ArrayAdapter.createFromResource(this, R.array.Uebungen_Bizeps, android.R.layout.simple_spinner_item);
    spinnerUebungen.setAdapter(adapterBizeps);
    spinnerUebungen.setOnItemSelectedListener(this);
    TextLaden();

}

public void rbTrizeps (View trizeps){

    ArrayAdapter adapterTrizeps = ArrayAdapter.createFromResource(this, R.array.Uebungen_Trizeps, android.R.layout.simple_spinner_item);
    spinnerUebungen.setAdapter(adapterTrizeps);
    spinnerUebungen.setOnItemSelectedListener(this);
    TextLaden();

}

public void rbBeine (View beine){

    ArrayAdapter adapterBeine = ArrayAdapter.createFromResource(this, R.array.Uebungen_Beine, android.R.layout.simple_spinner_item);
    spinnerUebungen.setAdapter(adapterBeine);
    spinnerUebungen.setOnItemSelectedListener(this);
    TextLaden();

}

public void rbPo (View po){

    ArrayAdapter adapterPo = ArrayAdapter.createFromResource(this, R.array.Uebungen_Po, android.R.layout.simple_spinner_item);
    spinnerUebungen.setAdapter(adapterPo);
    spinnerUebungen.setOnItemSelectedListener(this);
    TextLaden();

}

public void rbBauch (View bauch){

    ArrayAdapter adapterBauch = ArrayAdapter.createFromResource(this, R.array.Uebungen_Bauch, android.R.layout.simple_spinner_item);
    spinnerUebungen.setAdapter(adapterBauch);
    spinnerUebungen.setOnItemSelectedListener(this);
    TextLaden();

}




@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_trainingsergebnisse, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

@Override
public void onClick(View v) {

    if(v == btnSpeichern){

        TextSpeichernGewicht(etGewicht.getText().toString());
        TextSpeichernWiederholungen(etWiederholungen.getText().toString());
    }


}

private void TextSpeichernGewicht(String strInhaltGewicht){

    if(strInhaltGewicht !=null){
        editor.putString("Gewicht1", strInhaltGewicht);
        editor.commit();
        Toast.makeText(this, "Daten gespeichert", Toast.LENGTH_LONG).show();
    }
}

private void TextSpeichernWiederholungen(String strInhaltWiederholungen){

    if(strInhaltWiederholungen !=null){
        editor.putString("Wiederholungen1", strInhaltWiederholungen);
        editor.commit();
    }
}

private void TextLaden(){

    if(speicher.getString("Gewicht1", null) != null){
        txtGewicht.setText(speicher.getString("Gewicht1", null));
        txtWiederholungen.setText(speicher.getString("Wiederholungen1",null));

    }
    else{
        Toast.makeText(this, "Kein Inhalt gespeichert", Toast.LENGTH_LONG).show();
    }
}

}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.01.2015, 18:41:05 via Website

Also direkte Fehler sehe ich nicht aber:

spinnerUebungen = (Spinner) findViewById(R.id.spinnerUebungen);

 Spinner spinner = (Spinner)findViewById(R.id.spinnerUebungen);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            switch(position){

Du hast deinen Spinner 2mal definiert. Verwende nur eine Variable.

Zudem würde isch nicht implements AdapterView.OnItemSelectedListener, View.OnClickListener {
den onItemSelected Listener implementieren, da du schon im Code eine anonyme Klasse nutzt. Am besten du löschst das + dei beiden zugehörigen Methoden.

Dann wäre es noch von Vorteil zu wisson ob er in die ItemSelected Methode überhaupt hereinkommt.

Dafür könntest zu z.b. ein Log.d verwenden.

Zudem würde ich den Teil in die onCreate integrieren:

ArrayAdapter adapterPo = ArrayAdapter.createFromResource(this, R.array.Uebungen_Po, android.R.layout.simple_spinner_item);
spinnerUebungen.setAdapter(adapterPo);
spinnerUebungen.setOnItemSelectedListener(this); //Sobald das in der onCreate ist wird diese Zeile überflüssig ;)
TextLaden();

und statdessen die Methode löschen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

24.01.2015, 19:02:42 via Website

Pascal P.

Also direkte Fehler sehe ich nicht aber:

spinnerUebungen = (Spinner) findViewById(R.id.spinnerUebungen);

 Spinner spinner = (Spinner)findViewById(R.id.spinnerUebungen);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            switch(position){

Du hast deinen Spinner 2mal definiert. Verwende nur eine Variable.

Zudem würde isch nicht implements AdapterView.OnItemSelectedListener, View.OnClickListener {
den onItemSelected Listener implementieren, da du schon im Code eine anonyme Klasse nutzt. Am besten du löschst das + dei beiden zugehörigen Methoden.

Dann wäre es noch von Vorteil zu wisson ob er in die ItemSelected Methode überhaupt hereinkommt.

Dafür könntest zu z.b. ein Log.d verwenden.

Zudem würde ich den Teil in die onCreate integrieren:

ArrayAdapter adapterPo = ArrayAdapter.createFromResource(this, R.array.Uebungen_Po, android.R.layout.simple_spinner_item);
spinnerUebungen.setAdapter(adapterPo);
spinnerUebungen.setOnItemSelectedListener(this); //Sobald das in der onCreate ist wird diese Zeile überflüssig ;)
TextLaden();

und statdessen die Methode löschen.

Oh, das ich den spinner 2 mal deklariert habe ist mir nicht aufgefallen, danke :-)
Den Code den du in die onCreate integrieren würdest ist ja jetzt nur eine Methode von glaube ich 6-8 Stück, sollen die anderen auch noch da rein?
Und den 2. Absatz also: "Zudem würde isch nicht implements AdapterView.OnItemSelectedListener, View.OnClickListener {
den onItemSelected Listener implementieren, da du schon im Code eine anonyme Klasse nutzt. Am besten du löschst das + dei beiden zugehörigen Methoden.

Dann wäre es noch von Vorteil zu wisson ob er in die ItemSelected Methode überhaupt hereinkommt.

Dafür könntest zu z.b. ein Log.d verwenden." verstehe ich nicht ganz was du damit meinst :O
Vielen Dank.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.01.2015, 20:00:58 via Website

Du musst nur eine zusätzlich in die onCreate reinmachen. Keine löschen!
Das dient nur dem Zweck, dass beim Laden der App schon items in deinem Spinner stehen (ausser du möschtest das nicht dann ist der Code so iO)

Na ja wenn du dir deinen Code anschause, hast du die Methode 2mal:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

Nämlich einmal in der Klasse selbst (herforgerufen duch das Implementierte Interface.

und zum zweiten in der anonymen Klasse

 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

Eines von beiden musst du löschen sonst verwirrt dich das nur.
(Pass aber auf dass der Code der bei ItemClick ausgeführt wird, dann an derrichtigen stelle steht)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

25.01.2015, 15:13:06 via Website

Pascal P.

Du musst nur eine zusätzlich in die onCreate reinmachen. Keine löschen!
Das dient nur dem Zweck, dass beim Laden der App schon items in deinem Spinner stehen (ausser du möschtest das nicht dann ist der Code so iO)

Na ja wenn du dir deinen Code anschause, hast du die Methode 2mal:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

}

Nämlich einmal in der Klasse selbst (herforgerufen duch das Implementierte Interface.

und zum zweiten in der anonymen Klasse

 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

Eines von beiden musst du löschen sonst verwirrt dich das nur.
(Pass aber auf dass der Code der bei ItemClick ausgeführt wird, dann an derrichtigen stelle steht)

So, vielen Dank für eure ganze Unterstützung! :-) sehr nette Community hier. Nun wird, wenn ein Item beim spinner ausgewählt wird der Text geladen durch die Methode TextLaden(); :-) Trotz aller dem läuft es nicht ganz so ab wie ich es mir vorgestellt habe. :O
Meine Überlegung war eigentlich:
Wenn ich ein Item aus dem Spinner ausgewählt habe, dass der Inhalt der vorher in eine "TextBox" geschrieben wurde, gespeichert wird. Und wenn ich dann ein anderes Item ausgewählt habe, der Inhalt der beim derzeitigen Item gespeichert war, ausgegeben wird. Nun wird der Inhalt, egal welches Item ausgewählt wurde immer ausgegeben, also die letzte Eingabe sozusagen.
Beispiel:
Ich habe 2 Radio Buttons ("rbBrust" und "rbRücken") und einen Spinner. Der Spinner gibt die Übungen an, abhängig vom Radio Button. Also bei rbBrust kommt dann z.B. "Bankdrücken" oder "Butterfly" und bei Rücken z.B. "Kreuzheben" oder "Rudern". Nun schreibt man in eine TextBox das Gewicht rein, bei "Bankdrücken" z.B. 100kg. Wenn dann dieser Inhalt mit dem Button gespeichert wird, werden diese 100kg in einem TextView ausgegeben und gespeichert. Wenn ich dann auf "Butterfly" gehen würde, lädt er den Text der als letztes in die TextBox reingeschrieben wurde, also 100kg. Wenn ich dann das Gewicht bei "Butterfly" auf 50kg wechsel, lädt er (wenn ich wieder auf das item "Bankdrücken" oder ein anderes gehe) die 50kg. Ich würde das gerne so haben, das abhängig vom Item er die Inhalte speichert, sodass man bei jedem Item eine andere Zahl sozusagen haben kann. Ich wäre echt dankbar wenn einer das 1. versteht :D und 2. Dann Lösungsvorschläge hat :-)
Mit freundlichen Grüßen.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.01.2015, 15:52:09 via Website

Ganz verstehen tu ich das nicht (silly).. (Wie du dir das mit dem Werte speichern/laden vorstellst)
Aber ich kann mir den rest erstmal denken ;)

Ich würde das ganze dann abe nicht mit RadioButtons machen sondern mit 2 Spinnern.
Im 1. wählst du den Trainingsbereich aus (als Bauch, Bein oder Po etc.) und im 2. Spinner gibst du dann die Übung an.

Das heisst deine Auswahl verläuft über 2 Spinner.
Erstmal ist nur die Auswahllogik wichtig, das mit dem Speichern kann man dann später hinzufügen.

Gehnen wir mal ein Auswahszenario duch:

Der User wählt aus Spinner 1 jetzt "Beine" aus.
Dein Programm muss diese Auswahl jetzt so verarbeiteiten, dass in Spinner 2 die Übungen des Beintrainings angezeigt werden.
Jetzt hast du die Kategoie + Übung gewählt und kannst deine Daten in 1 bzw. mehrere EditText schreiben.
Was nun passieren soll hab ich leider noch nicht richtig verstanden.

Solange du keine neue Activity machst musst du den Wert nicht speichern, da der noch da drin stehen belibt.
Aber ich frage micht gerade was das soll, wenn ich einen Wert von 100kg habe und den immer lade und ändere habe ich immer nur einen Wert.
Mit diesem Wert machst du noch nichts. Folgt da noch was oder welche Idee steckt dahinter?

LG Pascal

— geändert am 25.01.2015, 15:52:21

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

25.01.2015, 16:14:58 via Website

[enter link description here][1]> [[cite Pascal P.]]
>

Ganz verstehen tu ich das nicht (silly).. (Wie du dir das mit dem Werte speichern/laden vorstellst)
Aber ich kann mir den rest erstmal denken ;)

Ich würde das ganze dann abe nicht mit RadioButtons machen sondern mit 2 Spinnern.
Im 1. wählst du den Trainingsbereich aus (als Bauch, Bein oder Po etc.) und im 2. Spinner gibst du dann die Übung an.

Das heisst deine Auswahl verläuft über 2 Spinner.
Erstmal ist nur die Auswahllogik wichtig, das mit dem Speichern kann man dann später hinzufügen.

Gehnen wir mal ein Auswahszenario duch:

Der User wählt aus Spinner 1 jetzt "Beine" aus.
Dein Programm muss diese Auswahl jetzt so verarbeiteiten, dass in Spinner 2 die Übungen des Beintrainings angezeigt werden.
Jetzt hast du die Kategoie + Übung gewählt und kannst deine Daten in 1 bzw. mehrere EditText schreiben.
Was nun passieren soll hab ich leider noch nicht richtig verstanden.

Solange du keine neue Activity machst musst du den Wert nicht speichern, da der noch da drin stehen belibt.
Aber ich frage micht gerade was das soll, wenn ich einen Wert von 100kg habe und den immer lade und ändere habe ich immer nur einen Wert.
Mit diesem Wert machst du noch nichts. Folgt da noch was oder welche Idee steckt dahinter?

LG Pascal

Das Problem war das ich nicht wusste wie man das mit 2 Spinnern realisiert, deswegen hab ich das mit radiobuttons gemacht, ist ja eigentlich egal oder?

— geändert am 25.01.2015, 16:17:22

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.01.2015, 16:26:22 via Website

Betonung liegt auf dem Eigentlich ;)
Denn wenn du 2 Spinner hast, kannst du das ganze viel einfacher erweitern (einfach einige ArrayEinträge hinzufügen)
und dann bist du schon fertig. (und ein paar zeilen Code)
Bei Radiobuttons musst du bei neuen sachen immer einen neuen Button erstellen und für diesen dann Code erstellen etc.
Im Moment kannst du es ja erstmal so lassen und später ändern.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

25.01.2015, 16:54:19 via Website

Pascal P.

Betonung liegt auf dem Eigentlich ;)
Denn wenn du 2 Spinner hast, kannst du das ganze viel einfacher erweitern (einfach einige ArrayEinträge hinzufügen)
und dann bist du schon fertig. (und ein paar zeilen Code)
Bei Radiobuttons musst du bei neuen sachen immer einen neuen Button erstellen und für diesen dann Code erstellen etc.
Im Moment kannst du es ja erstmal so lassen und später ändern.

image
Oberfläche sieht jetzt so aus, nochmal wie ich das eigentlich wollte:
Wenn ich jetzt bei Brust und Bankdrücken 100kg eingebe speichert er 100kg im textview. Wenn ich dann bei rücken 200kg eingebe lädt er momentan wenn ich wieder auf Brust gehe die 200kg obwohl ich 100 da eingegeben habe. Er soll halt für jede einzelne Übung eine neues textview sozusagen haben :-D

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.01.2015, 17:18:02 via Website

Achso ok dann ahbe ich das falsch Verstanden.

Wenn jede übung eigenen Werte haben soll, dann muss sie eindeutig Identifizierbar sein, damit du weisst welcher Wert zu welchem Item gehört.
Speichern würde ich es dann weiterhin in den SharedPreferences halt nur mit eindeutigem Key.
So würden dann deine Methoden aussehen:

private void TextSpeichern(String key, String value){

if(value!=null && key != null){
    editor.putString(key, value);
    editor.commit();
    Toast.makeText(this, "Daten gespeichert", Toast.LENGTH_LONG).show();
}

}

private String TextLaden(String key){

if(speicher.getString(key, null) != null){
    return speicher.getString(key, null);

}
else{
    Toast.makeText(this, "Kein Inhalt gespeichert", Toast.LENGTH_LONG).show();
return null;
}

}

Jetzt speichern oder laden die methoden nur deine Textboxeb befüllen solltest du ausserhalb in anderen Methoden machen, damit das laden und speichern in den Shared preferences als Methode allgemein bleibt.

identifizierung des richtgen Wertes + Key

Angenommen es ist gerade wie in deinem Beispiel "Brust" und "Bankdrücken" selektiert.
Dann kannst du das am einfachsten über die Namen Identifizieren also Brust + Bankdrücken [+ Gewicht] <- Da kannst du dann auch noch was anderes nehmen

Ich würde jetzt meinen Key unter dem ich z.b. das gewicht speichere so erstelen:

Name des selektieren Radio Buttons + Name des selektieren SpinnerItems + Name der Varaibel [z.b. Gewicht]

Im konkreten Beispiel oben würde der Key dann so aussehen:

Sting key =   "BeineBankdrückenGewicht"; //Den key musst du dynamisch über die Selectierten Items erzeugen
String value = "100kg"; //Statt diese String var kannst du auch deinen Wert aus dem EditText nehmen.
TextSpeichern(key,value); //Hier wird die Value gespeichert

Jetzt musst du nur schauen wie man den Text wieder laden kann:

String key = "BeineBankdrückenGewicht";//Müsste wieder dynamisch erzeugt werden.

String vlaue = TextLaden(key); //In dieser String variable stehen dann wieder deine 100kg drinne .

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

25.01.2015, 17:23:04 via Website

Pascal P.

Achso ok dann ahbe ich das falsch Verstanden.

Wenn jede übung eigenen Werte haben soll, dann muss sie eindeutig Identifizierbar sein, damit du weisst welcher Wert zu welchem Item gehört.
Speichern würde ich es dann weiterhin in den SharedPreferences halt nur mit eindeutigem Key.
So würden dann deine Methoden aussehen:

private void TextSpeichern(String key, String value){

if(value!=null && key != null){
    editor.putString(key, value);
    editor.commit();
    Toast.makeText(this, "Daten gespeichert", Toast.LENGTH_LONG).show();
}

}

private String TextLaden(String key){

if(speicher.getString(key, null) != null){
    return speicher.getString(key, null);

}
else{
    Toast.makeText(this, "Kein Inhalt gespeichert", Toast.LENGTH_LONG).show();
return null;
}

}

Jetzt speichern oder laden die methoden nur deine Textboxeb befüllen solltest du ausserhalb in anderen Methoden machen, damit das laden und speichern in den Shared preferences als Methode allgemein bleibt.

identifizierung des richtgen Wertes + Key

Angenommen es ist gerade wie in deinem Beispiel "Brust" und "Bankdrücken" selektiert.
Dann kannst du das am einfachsten über die Namen Identifizieren also Brust + Bankdrücken [+ Gewicht] <- Da kannst du dann auch noch was anderes nehmen

Ich würde jetzt meinen Key unter dem ich z.b. das gewicht speichere so erstelen:

Name des selektieren Radio Buttons + Name des selektieren SpinnerItems + Name der Varaibel [z.b. Gewicht]

Im konkreten Beispiel oben würde der Key dann so aussehen:

Sting key =   "BeineBankdrückenGewicht"; //Den key musst du dynamisch über die Selectierten Items erzeugen
String value = "100kg"; //Statt diese String var kannst du auch deinen Wert aus dem EditText nehmen.
TextSpeichern(key,value); //Hier wird die Value gespeichert

Jetzt musst du nur schauen wie man den Text wieder laden kann:

String key = "BeineBankdrückenGewicht";//Müsste wieder dynamisch erzeugt werden.

String vlaue = TextLaden(key); //In dieser String variable stehen dann wieder deine 100kg drinne .

Die Methoden die du jetzt gemacht hast also laden und speichern hab ich ja auch. Soll ich den Inhalt der bei mir drin stand alles aus der Methode entfernen und deinen Code übernehmen? Und die 2 letzten Code Abschnitte kommen wo rein? :-D
Vielen dank bis hier hin :-)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.01.2015, 17:35:21 via Website

Bitte zitiere nicht immer meinen Beitrag wenn der orginal direkt über deinem stet. Danke :)


Ja am besten du übernimmst die Methode erstmal so.
Dann hast du eine zum speichern eines beliebigen wertes und eine zum wieder laden.

Die unteren beiden Codeschnipsel müssen (vor allem der Key) von dir abgeändert werden, sodass der Key Sting immer automatisch erzeugt wird, je nach dem was oben selektiert ist.
Eigentlich muss sowas immer rein wenn du deinen Wert spehcern wilst.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian ASP
  • Forum-Beiträge: 46

26.01.2015, 13:49:31 via Website

Sehr gut, vielen dank!
Ich bin gerade ein wenig durcheinander und überfordert :-D. Ich weiß nicht wie ich den key also "String key" dynamisch über die items erzeugen kann.
Bei value wäre das ja eigentlich nur edittext.getText().toString(); richtig?
:-)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

26.01.2015, 14:13:36 via App

key = "WerteSpeicherBla" + indexDesSelektiertenItems

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Fabian ASP
  • Forum-Beiträge: 46

26.01.2015, 15:51:05 via Website

Ganz ehrlich das hilft jetzt nicht weiter :D
hab jetzt das für die erste variable da stehen:
String key = "BrustBankdrückenGewicht" + ;

Antworten
Sven R.
  • Forum-Beiträge: 1.904

26.01.2015, 17:28:12 via Website

Wenn du radio buttons hast, musst du die irgendwie durchnummerieren; vielleicht mit Tags. Spinner gehen einfach, weil die ja wissen, welches (selektierte) element welchen index hat. (getIndexOf(Object) oder so)

Also grob gesagt, brauchst du den Index des selektierten ELememts.

Also hast du dann zwei sachen, die du durchnummerien kannst. Dann machst du zum Beispiel

key = "Speicherung" + String.valueOf(indexVonDemSelektiertenRadioButton) + "," + String.valueOf(indexDesSelektiertenEintragsImSpinner);

Wenn es aber jetzt schon so weit kommt, dass du zwei Werte hast, würde ich zukunfstechnisch gesehen mit einfach parsebaren Formaten arbeiten, z.B. JSON: jsonObject.put("kategorie", indexDerKategorie).put("Körperteil", indexDesKörperteils) und das Rausparsen: int i = jsonObject.get("kategorie"). usw.. Edit: achne, passt in diesem beispiel nicht. trotzdem würde es mit json oder so auch gut gehen. entscheide die erstmal.

— geändert am 26.01.2015, 17:31:31

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Fabian ASP
  • Forum-Beiträge: 46

26.01.2015, 17:52:14 via Website

hab kurz recherchiert und das hier gefunden:
int id = radioGroup2.getCheckedRadioButtonId();
if (id == 0){

    }

Kann man damit was anfangen? und wenn ja wie? :D

Antworten
Sven R.
  • Forum-Beiträge: 1.904

26.01.2015, 19:37:18 via App

Ich würde das ganze sehr flexibel machen:

-Mit einer for Schleife allen RadioButtons den selben Listener zuordnen.
-beim on select den Tag prüfen. Die Radio Buttons sollten nummeriert sein über die Tags
-mit dem Tag etwas machen, wie zum Beispiel den Wert laden

— geändert am 26.01.2015, 19:37:57

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Fabian ASP
  • Forum-Beiträge: 46

26.01.2015, 19:45:45 via Website

Ich weiß nicht was du mit einem "Tag" meinst, kannst du das vielleicht näher erläutern?
Und vielleicht anhand eines Beispiels das erklären, ich finde so kann man das am besten veranschaulichen :-)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

26.01.2015, 21:19:34 via App

http://developer.android.com/reference/android/view/View.html#attr_android:tag

Kann gerade kein Beispiel machen. Du speicherst einfach deine Nummerierung in dem Tag.

Deinen Key bennenst aus der Kombination der Auswahlelemnte(Spinner, Radio Button)

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten