Спиннер на изменение значения - PullRequest
18 голосов
/ 07 марта 2011

В моей системе два счетчика. Теперь мне нужно изменить выбранное значение 2-го счетчика в зависимости от значения первого счетчика. Как только пользователь изменит значение 1-го счетчика, значение 2-го счетчика будет установлено автоматически в зависимости от выбранного значения 1-го счетчика. Как это реализовать?

Ответы [ 3 ]

17 голосов
/ 07 марта 2011

Из учебника Hello Spinner :

Теперь создайте вложенный класс, который реализует AdapterView.OnItemSelectedListener. Это обеспечит метод обратного вызова, который уведомит ваше приложение, когда элемент будет выбран из Spinner. Вот как должен выглядеть этот класс:

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 требует методов обратного вызова onItemSelected () и onNothingSelected (). Первый вызывается, когда выбирается элемент из AdapterView, и в этом случае короткое сообщение Toast отображает выбранный текст; и последний вызывается, когда выделение исчезает из AdapterView, что не происходит в этом случае, поэтому оно игнорируется. Теперь MyOnItemSelectedListener должен быть применен к Spinner. Вернитесь к методу onCreate () и добавьте следующую строку в конец: spinner.setOnItemSelectedListener (new MyOnItemSelectedListener ());

Другими словами, вам нужно создать OnItemSelectedListener, который изменяет значение второго счетчика, и прикрепить его к первому счетчику.

3 голосов
/ 26 июля 2013

Вы должны поставить условие onItemSelected самого первого счетчика В этом примере вы можете получить значение 2-го счетчика в зависимости от 1-го счетчика:

        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);
                    }

        }

    }    
1 голос
/ 29 января 2014

Вы должны определить onItemSelected () отдельно для каждого счетчика.В противном случае код выполняется, если что-либо выбрано из любого счетчика.

    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
        }
    });
...