Tuesday, March 29, 2016

Android spinner: Заполняем спинер в зависимости от значений второго спинера

Задача такая: сформировать значения в выпадающих списках в зависимости от того, что вы выберите из списка с родительскими элементами.
Например, список1 содержит значения Audi & Skoda.
Например, список2 содержит значения Audi A1, Audi A2, Skoda Octavia, Skoda Rapid.
Приступим:
Сформируем список1, используя отдельный класс:
public class StringWithTag {
        public String string;
        public Object tag;
        public StringWithTag(String stringPart, Object tagPart) {
            string = stringPart;
            tag = tagPart;
        }
        @Override
        public String toString() {
            return string; }}
сделаем коллекцию:
        List<StringWithTag> myList = new ArrayList<StringWithTag>();
        myList.add(new StringWithTag("Audi","1"));
        myList.add(new StringWithTag("Skoda","2"));
Создадим спинер:
final ArrayAdapter adapter1 = new ArrayAdapter<StringWithTag>(SettingsActivity.this,R.layout.simple_spinner_item1, myList);
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner_set1.setAdapter(adapter3);
Создаем слушатель для списка1:
spinner_set1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (spinner_set1.getItemAtPosition(position).toString().equals(spinner_set1.getItemAtPosition(position).toString())) {
// у меня происходит наполнение временного списка из списка2(lowList)
                    tempList.clear();
                    for (int i=0;i<lowList.size();i++){
                        if (lowList.get(i).BlockID.equals(String.valueOf(topList.get(position).ID))){
                            tempList.add(new StringWithTag(lowList.get(i).ID,lowList.get(i).BlockID, (Object) lowList.get(i).tag));
                        }
                    }
                    ArrayAdapter adapter2 = new ArrayAdapter<StringWithTag>(SettingsActivity.this,R.layout.simple_spinner_item1, tempList);
                    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    spinner_set2.setAdapter(adapter2);
                     //установка реагирования на выборку значений из списка2
                    spinner_set2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                            String strModel = spinner_set2.getItemAtPosition(position).toString();
                        }
                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {
                        }
                    });
}}
Успехов!