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

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

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

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

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

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

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. Когда для адаптера установлено значение AdapterView, первый элемент адаптера будет автоматически выбран один раз. Таким образом, он снова вызовет слушателя.

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

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

if (parent.getId()==2131165201){
  //code to check selected item and define new adapter3 for spinner3
9
задан Bao 20 March 2012 в 08:53
поделиться