Обновлять элементы счетчика на основе выбранного элемента другого счетчика

Я пытаюсь обновить счетчик выбранным элементом из другого счетчика. Следующий блок кода описывает, как я это сделал.

Я мог бы успешно обновить spinner3, используя оператор if внутри метода onItemSelected (). Но моя проблема в том, что кажется, что цикл просто продолжает работать, который автоматически выбирает значение «5» из spinner2 (так что Toast просто продолжает выплевывать «Вы выбрали 5»).

Когда активность загружается, Toast будет отображать каждый выбор из всех трех прядильщиков. Означает ли это, что первый выбор для каждого счетчика выполняется, когда адаптер установлен на прядильщик?

И привязывает ли адаптер adapter3 к spinner3 (в инструкции if) запускает новый выбор spinner2?

Заранее спасибо!

public class WheelchairHelperMain extends Activity{ Spinner spinner2; Spinner spinner3; ArrayAdapter<CharSequence> adapter3 ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.wheelchair_helper_main); Spinner spinner1 = (Spinner)findViewById(R.id.spinner1); ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(this, R.array.destinations_list, android.R.layout.simple_spinner_item); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(adapter1); spinner1.setOnItemSelectedListener(new MyOnItemSelectedListener()); spinner2 = (Spinner)findViewById(R.id.spinner2); ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,R.array.departure_timeH_list,android.R.layout.simple_spinner_item); adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner2.setAdapter(adapter2); spinner2.setOnItemSelectedListener(new MyOnItemSelectedListener()); spinner3 = (Spinner)findViewById(R.id.spinner3); spinner3.setOnItemSelectedListener(new MyOnItemSelectedListener()); } public class MyOnItemSelectedListener implements OnItemSelectedListener{ public void onItemSelected(AdapterView<?> parent, View v, int pos,long id) { // TODO Auto-generated method stub //use the selected station and departure time to calculate the required time Toast toast = Toast.makeText(parent.getContext(),"You've chosen: " + parent.getItemAtPosition(pos), 2); toast.show(); if (spinner2.getSelectedItem().equals("5")){ adapter3 = ArrayAdapter.createFromResource(WheelchairHelperMain.this,R.array.departure_timeH5M_list, android.R.layout.simple_spinner_item); adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner3.setAdapter(adapter3); Log.v("spinner2","5"); }else if(spinner2.getSelectedItem().equals("6")){ adapter3 = ArrayAdapter.createFromResource(WheelchairHelperMain.this,R.array.departure_timeH6M_list, android.R.layout.simple_spinner_item); adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner3.setAdapter(adapter3); Log.v("spinner2","6"); } } public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } } } 

Ниже приведены файлы xml. Это строка-массив для spinner2:

 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="departure_timeH_prompt">何時?</string> <string-array name="departure_timeH_list"> <item>5</item> <item>6</item> <item> 7 </item> <item> 8 </item> <item> 9 </item> <item> 10 </item> <item> 11 </item> <item> 12 </item> <item> 13 </item> <item> 14 </item> <item> 15 </item> <item> 16 </item> <item> 17 </item> <item> 18 </item> <item> 19 </item> <item> 20 </item> <item> 21 </item> <item> 22 </item> <item> 23 </item> <item> 24 </item> <item> 0 </item> </string-array> </resources> 

Строковый массив для spinner3:

 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="departure_timeM_prompt">何分?</string> <string-array name="departure_timeH5M_list"> <item> 5 </item> <item> 24 </item> <item> 38 </item> <item> 52 </item> </string-array> <string-array name="departure_timeH6M_list"> <item> 01 </item> <item> 08 </item> <item> 17 </item> <item> 25 </item> <item> 34 </item> <item> 41 </item> <item> 47 </item> <item> 57 </item> </string-array> </resources> 

Я только что нашел свои проблемы.

В исходном коде:

  spinner3.setAdapter(adapter3); 

onItemSelectedListener внутри onItemSelectedListener . Когда адаптер установлен в AdapterView , первый элемент адаптера будет автоматически выбран один раз. Таким образом, это снова вызовет слушателя.

И так как я не установил флаг, чтобы отличить выбор от spinner2 и поместить spinner3.setAdapter(adapter3) , он просто продолжит выполнение «выбора первого элемента на адаптере3» – проверьте, выбран ли выбранный элемент в виде 5-дюймового цикла ,

Таким образом, для меня используется следующий флаг в исходном коде:

 if (parent.getId()==2131165201){ //code to check selected item and define new adapter3 for spinner3 

Я бы предложил вам использовать позицию, возвращаемую onItemclickListener, и использовать ее в массиве, инициализирующем адаптер массива для этого счетчика: например —

`

 String hrs[]=getStringArray(R.array.departure_timeH6M_list); if(hrs[pos].equals("5")) { } 

`

и так далее…

Когда Spinner сменит данные внутри адаптера следующего счетчика. И просто напишите adapter.notifyDataSetChanged(); Содержимое Внутри следующего счетчика будет изменено.

Если я правильно понял ваш вопрос, spinner выбирает значение по умолчанию. Да, это правильно, если spinner устанавливает адаптер, он выберет первое значение. Вам нужно написать простой взлом в onItemselectedListener, чтобы очистить этот выбор по умолчанию. Возьмите одну переменную int variable = -1 в моем коде, это ageposition im, принимающий один возраст булевского значения, выбранный для поиска выбора по умолчанию. If (ageselected) означает, что счетчик выбран пользователем.

Наконец, используйте ageSpinner.setOnItemSelectedListener (новый MyOnItemSelectedListener ());

  class MyOnItemSelectedListener implements OnItemSelectedListener { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { if(ageposition==-1) { ageselected=false; ageposition=pos; } else { ageposition=pos; ageselected=true; childage=age[pos]; } } public void onNothingSelected(AdapterView<?> parent) { // Dummy } } 

Надеемся, что приведенный выше код поможет вам