2016-05-23 8 views
0

Ich erstelle eine App für einen Freund von mir (während ich Java-/Android-Apps erlerne), wo seine Kunden eine Reihe von Spinner verwenden können, die den Preis eines bestimmten Produkts auswählen.Spinnerauswahl beibehalten, wenn andere Spinneränderungen vorgenommen werden

Ich bin im Moment mit den Spinner ein wenig fest, ich bekomme endlich, wie sie alle zusammen hängen und ich habe es geschafft, einen Code zu erstellen, der die Optionen eines Spinner basierend auf der Auswahl des vorherigen Spinner festlegen wird.

Dies funktioniert, bis die Auswahl auf einem anderen Spinner getroffen wird. beispielsweise. "single speed" ist auf Spinner 1 ausgewählt. "4" ist auf Spinner 2 ausgewählt. "hook" ist auf Spinner 3 ausgewählt, Spinner 2 wird zurückgesetzt.

Wie kann ich verhindern, dass meine dynamischen Spinner zurückgesetzt werden, sobald ein anderer Spinner ausgewählt wird?

Schließlich werde ich alle Spinner dynamisch aufbauen, da unterschiedliche Auswahlmöglichkeiten bestimmen, welche Optionen verfügbar sein sollen.

Vielen Dank im Voraus. (Schätzen Sie es nicht brillant geschrieben, hoffentlich werden Verbesserungen im Laufe der Zeit kommen).

public class priceList extends Activity implements AdapterView.OnItemSelectedListener{ 

    Spinner capacity; 
    Spinner speed; 
    Spinner hoistSpeed; 
    Spinner type; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_price_list); 


     //Spinner for Capacity 
     capacity = (Spinner) findViewById(R.id.capacityTextView); 
     ArrayAdapter adapterCapa=ArrayAdapter.createFromResource(this,R.array.arrayCapacity, android.R.layout.simple_spinner_item); 
     capacity.setAdapter(adapterCapa); 
     capacity.setOnItemSelectedListener(this); 

     //Spinner for the Speed 
     speed = (Spinner) findViewById(R.id.speedTextView); 
     ArrayAdapter adapterSpd = ArrayAdapter.createFromResource(this,R.array.arraySpeed, android.R.layout.simple_spinner_item); 
     speed.setAdapter(adapterSpd); 
     speed.setOnItemSelectedListener(this); 


     //Spinner for the type 
     type = (Spinner) findViewById(R.id.typeTextView); 
     ArrayAdapter adapterBeam=ArrayAdapter.createFromResource(this,R.array.arrayType, android.R.layout.simple_spinner_item); 
     type.setAdapter(adapterBeam); 
     type.setOnItemSelectedListener(this); 

    } 

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

     //TextView myText = (TextView) view; 
     //Toast.makeText(this, myText.getText(), Toast.LENGTH_SHORT).show(); 


     hoistSpeed = (Spinner) findViewById(R.id.hoistSpeedTextView); 
     ArrayAdapter adapterTypeA=ArrayAdapter.createFromResource(this,R.array.arrayHoistSpeedSingle, android.R.layout.simple_spinner_item); 
     hoistSpeed = (Spinner) findViewById(R.id.hoistSpeedTextView); 
     ArrayAdapter adapterTypeB=ArrayAdapter.createFromResource(this,R.array.arrayHoistSpeedDouble, android.R.layout.simple_spinner_item); 

     if(speed.getSelectedItem().toString().equals("Single Speed")) 
     { 

      hoistSpeed.setAdapter(adapterTypeA); 

     } 

     else if(speed.getSelectedItem().toString().equals("Dual Speed")) 
     { 

      hoistSpeed.setAdapter(adapterTypeB); 

     } 

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

    } 

} 
+0

https://github.com/henrychuangtw/ReuseSpinner – HenryChuang

Antwort

1

Ihre Frage ist ziemlich verwirrend, vielleicht können Sie

umformulieren Aber Sie können nur Ihren nächsten Spinner steuern oder einzustellen auf das, was in der aktuellen Spinner ausgewählt ist, und Ihre Schecks in geeigneter Weise tun.

Sie können Ihren setOnItemSelectedListener direkt schreiben, um die Logik voneinander zu trennen.

String[] speedArr = getResources().getStringArray(R.array.arraySpeed); 

    speed.setAdapter(adapter); 
      speed.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

       @Override 
       public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
        //Do your checks here, and set the next spinner, or reset the previous one. 

       //This automatically gets your selected value, so no need doing an if else check here again 
       String selectedValue = speedArr[position]; 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> arg0) { 
        // TODO Auto-generated method stub 

       } 
      }); 
+0

Danke für die Antwort. Entschuldigung für die Verwirrung. Die nächste Auswahl wird durch die Auswahl des vorherigen Drehfelds bestimmt. Wenn ein drittes Drehfeld ausgewählt ist, wird das zweite Drehfeld aus irgendeinem Grund zurückgesetzt. Ist das sinnvoll. Ich werde meine Frage bearbeiten, einige Kommas wären hilfreich gewesen. –

+0

Ja, wenn Sie den setOnItemSelectedListener eines jeden Spins trennen, würde das das Problem lösen, dass der zweite Spinner zurückgesetzt wird, weil Ihre Code-Logik getrennt platziert wird. Wiederverwenden Sie diesen Code –

+0

Ok, danke + Html Tosin, ich werde das geben. –

Verwandte Themen