web-dev-qa-db-fra.com

Spinner sur le changement de valeur

J'ai deux spinner dans mon système. Maintenant, je dois changer la valeur sélectionnée du 2ème spinner en fonction de la première valeur du spinner. Dès que l'utilisateur changera la valeur du premier spinner, la deuxième valeur du spinner sera réglée automatiquement en fonction de la valeur sélectionnée du premier spinner. Comment mettre en œuvre cela?

19
dev_android

Depuis le tutoriel Hello Spinner :

Créez maintenant une classe imbriquée qui implémente AdapterView.OnItemSelectedListener. Cela fournira une méthode de rappel qui informera votre application lorsqu'un élément a été sélectionné dans le Spinner. Voici à quoi devrait ressembler cette classe:

public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
      Toast.makeText(parent.getContext(), "The planet is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}

AdapterView.OnItemSelectedListener nécessite les méthodes de rappel onItemSelected () et onNothingSelected (). Le premier est appelé lorsqu'un élément de AdapterView est sélectionné, auquel cas un court message Toast affiche le texte sélectionné; et ce dernier est appelé lorsqu'une sélection disparaît de AdapterView, ce qui ne se produit pas dans ce cas, donc il est ignoré. Maintenant, MyOnItemSelectedListener doit être appliqué au Spinner. Revenez à la méthode onCreate () et ajoutez la ligne suivante à la fin: spinner.setOnItemSelectedListener (new MyOnItemSelectedListener ());

En d'autres termes, vous devez créer un OnItemSelectedListener qui modifie la valeur du deuxième spinner et l'attacher au premier spinner.

18
I82Much

Vous devez mettre la condition sur onItemSelected du tout premier spinner. Par cet exemple, vous pouvez obtenir la valeur du 2ème spinner en fonction du 1er spinner:

        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

        if(arg0.equals(spin0)){
        spin1.setClickable(true);
                    if(spin0.getSelectedItem().equals("India"))
                    {
                        ArrayAdapter <String> s1 = new ArrayAdapter <String> (this,Android.R.layout.simple_spinner_item,states_india);
                        s1.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
                        spin1.setAdapter(s1);
                    }
                    else  if(spin0.getSelectedItem().equals("Pakistan"))
                    {
                        ArrayAdapter <String> s2 = new ArrayAdapter <String> (this,Android.R.layout.simple_spinner_item,states_pak);
                        s2.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
                        spin1.setAdapter(s2);
                    }
                    else  if(spin0.getSelectedItem().equals("China"))
                    {
                        ArrayAdapter <String> s3 = new ArrayAdapter <String> (this,Android.R.layout.simple_spinner_item,states_china);
                        s3.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
                        spin1.setAdapter(s3);
                    }

        }

    }    
4
arraystack

Vous devez définir onItemSelected () séparément pour chaque spinner. Sinon, le code est exécuté si quelque chose est sélectionné à partir de l'un des deux flèches.

    newCategory.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub

            String selCat = newCategory.getItemAtPosition(arg2).toString();

            if (selCat != "New")
            {
                loadSpinnerData(topic);
            }
        }

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

        }
    });
    newTopic.setOnItemSelectedListener(new OnItemSelectedListener() {


        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
            // TODO Auto-generated method stub
            loadSpinnerData()
    }

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