根据另一个微调器的选定项目更新微调器项目 [英] Update spinner items based on the selected item of another spinner

查看:58
本文介绍了根据另一个微调器的选定项目更新微调器项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to update a spinner by a selected item from another spinner. The following code block describes how I did it.

我可以使用onItemSelected()方法中的if语句成功更新 spinner3 .但是我的问题是,似乎循环一直在运行,该循环会自动从 spinner2 中选择值"5"(因此Toast只会吐出您选择了5").

I could successfully update the spinner3 using the if statement inside onItemSelected() method. But my problem is that it seems that a loop just keeps running which automatically selects value "5" from spinner2 (so the Toast just keeps spitting out "You've chosen 5").

加载活动后,Toast将显示所有三个微调器中的每个选择.这是否意味着在将适配器设置为微调器时,每个微调器的第一选择都已完成?

When the activity is loaded, the Toast will display each selection from all three spinners. Does it mean that the first selection for each spinner is done when an adapter is set to a spinner?

并且将adapter3绑定到spinner3(在if语句中)会触发对spinner2的新选择吗?

And does binding adapter3 to spinner3 (in the if statement) trigger a new selection of 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的字符串数组:

The following are the xml files. This is the string-array for 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的字符串数组:

The string-array for 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 时,适配器上的第一项将被自动选择一次.因此,它将再次触发侦听器.

is called inside the onItemSelectedListener. When an adapter is set to an AdapterView, the first item on the adapter will be automatically chosen once. So, it will trigger the listener again.

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

And since I didn't set a flag to distinguish whether the selection comes from spinner2 and put the spinner3.setAdapter(adapter3), it will just keep running the "choosing first item on adapter3 -> check if the selected item is 5" loop.

因此,在原始代码中插入以下标志对我而言是有效的:

So, inserting the following flag in the original code works for me:

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

推荐答案

我建议您使用onItemclickListener返回的位置并将其用于该微调器的数组初始化数组适配器中:like ---

i would suggest u use the position returned by the onItemclickListener and use it in an array initializing array adapter for that spinner: like---

`

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

    }

`

以此类推...

这篇关于根据另一个微调器的选定项目更新微调器项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆