выбор счетчика определяет выбор для другого счетчика

У меня есть вопрос о спиннерах, и я не могу найти в Интернете ничего о том, как это сделать.

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

Я хочу, чтобы счетчик для выбора, доступного для второго счетчика, зависел от выбора, сделанного в первом. т. е. когда пользователь выбирает «Юго-запад», выбор второго счетчика будет «Лейк-Чарльз», «Айова», «Лейк-Артур» и т. д. А когда пользователь выбирает юго-восток, выбор второго счетчика будет «Гретна», «Новый Орлеан», «Люлинг» и т. д.

как мне это сделать?

примеры приветствуются!

Спасибо!


person Madonk    schedule 03.08.2012    source источник


Ответы (2)


Попробуйте этот код..

Я надеюсь, что это будет полезно для вас...

public class MainActivity extends Activity {

Spinner sp1,sp2;
ArrayAdapter<String> adp1,adp2;
List<String> l1,l2;
int pos;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    l1=new ArrayList<String>();

    l1.add("A");
    l1.add("B");

    sp1= (Spinner) findViewById(R.id.spinner1);
    sp2= (Spinner) findViewById(R.id.spinner2);

    adp1=new ArrayAdapter<String> (this,android.R.layout.simple_dropdown_item_1line,l1);
    adp1.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    sp1.setAdapter(adp1);

    sp1.setOnItemSelectedListener(new OnItemSelectedListener() {

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

        }

        private void add() {
            // TODO Auto-generated method stub
            Toast.makeText(getBaseContext(), ""+pos, Toast.LENGTH_SHORT).show();

            switch(pos)
            {
            case 0:
                l2= new ArrayList<String>();                    
                l2.add("A 1");
                l2.add("A 2");

                adp2=new ArrayAdapter<String>(MainActivity.this,
                        android.R.layout.simple_dropdown_item_1line,l2);
                adp2.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
                sp2.setAdapter(adp2);

                select();

                break;
            case 1:
                l2= new ArrayList<String>();                    
                l2.add("B 1");
                l2.add("B 2");

                adp2=new ArrayAdapter<String>(MainActivity.this,
                        android.R.layout.simple_dropdown_item_1line,l2);
                adp2.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
                sp2.setAdapter(adp2);

                select();

                break;
            }

        }

        private void select() {
            // TODO Auto-generated method stub

            sp2.setOnItemSelectedListener(new OnItemSelectedListener() {

                @Override
                public void onItemSelected(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getBaseContext(), "Test "+arg2, Toast.LENGTH_SHORT).show();

                }

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

                }
            });

        }

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

        }
    });
    }

}
person Balaji    schedule 03.08.2012
comment
Это оно! Спасибо! Мне просто нужно внести несколько изменений, чтобы они соответствовали моим данным, добавить еще один счетчик, а затем открыть новое действие! - person Madonk; 03.08.2012

Ну, по сути, вы поймаете первое событие выбора спиннеров. При этом вы измените содержимое списка доступных для второго счетчика. Вам также может понадобиться вызвать invalidateView(), чтобы изменения вступили в силу. Так что там действительно три части

1) Перехватить выбор в обработчике onClick.

2) изменить данные для второго счетчика и сбросить данные счетчика 2 до скорректированных данных после фильтрации.

3) При необходимости сделайте второй счетчик недействительным и, возможно, недействительным View в содержащемView, чтобы все это отображалось.

Так что разбейте его на эти три шага и дайте нам знать, если у вас есть вопросы по любому из них.

person Code Droid    schedule 03.08.2012
comment
Я забыл упомянуть, насколько я новичок в этом. Это мое первое приложение, и единственный опыт программирования, который у меня есть, — это базовый HTML, лол. - person Madonk; 03.08.2012
comment
на самом деле, я думаю, что нашел что-то mkyong.com/android/ android-spinner-drop-down-list-example - person Madonk; 03.08.2012