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

时间:2012-03-20 05:26:43

标签: 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

    }

}
}

以下是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),因此它将继续运行“在adapter3上选择第一项 - &gt;检查所选项目是否为5“循环。

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

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

3 个答案:

答案 0 :(得分:2)

我建议你使用onItemclickListener返回的位置,并在为该微调器初始化数组适配器的数组中使用它:like ---

`

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

    }

`

依旧......

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果我正确理解你的问题,微调器默认选择一个值。如果微调器设置为适配器,它将是正确的,它将选择第一个值。你必须在onItemselectedListener中编写简单的hack来清除默认选择。 取一个int变量= -1 在我的代码中它是年龄限制 我选择一个布尔值年龄来查找默认选择。 if(ageselected)表示用户选择的微调器。

最后使用ageSpinner.setOnItemSelectedListener(new 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
        }
    }

希望以上代码可以帮助您