根据另一个微调器的选定项更新微调器项

Bao*_*Bao 9 android spinner

我试图通过另一个微调器中的选定项更新微调器.以下代码块描述了我是如何做到的.

我可以使用onItemSelected()方法中的if语句成功更新spinner3.但我的问题是,似乎一个循环只是继续运行,它自动从spinner2中选择值"5" (所以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

    }

}
}
Run Code Online (Sandbox Code Playgroud)

以下是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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我刚刚发现了我的问题.

在原始代码中:

  spinner3.setAdapter(adapter3);
Run Code Online (Sandbox Code Playgroud)

被称为内部onItemSelectedListener.当适配器设置为a时AdapterView,适配器上的第一项将自动选择一次.所以,它会再次触发听众.

而且由于我没有设置标志来区分选择是否来自spinner2并且放入spinner3.setAdapter(adapter3),它将继续运行"在adapter3上选择第一项 - >检查所选项是否为5"循环.

因此,在原始代码中插入以下标志对我有用:

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

may*_*kar 1

当 Spinner 更改时,将数据放入下一个 Spinner 的适配器中。而刚刚写入的adapter.notifyDataSetChanged();下一个微调器内的内容将会改变。