【发布时间】:2011-07-10 08:22:07
【问题描述】:
我的系统中有两个微调器。现在我必须根据第一个微调器值更改第二个微调器的选定值。一旦用户更改第一个微调器值,第二个微调器值将根据第一个微调器的选定值自动设置。如何实现?
【问题讨论】:
我的系统中有两个微调器。现在我必须根据第一个微调器值更改第二个微调器的选定值。一旦用户更改第一个微调器值,第二个微调器值将根据第一个微调器的选定值自动设置。如何实现?
【问题讨论】:
来自Hello Spinner 教程:
现在创建一个实现 AdapterView.OnItemSelectedListener 的嵌套类。这将提供一个回调方法,该方法将在从 Spinner 中选择项目时通知您的应用程序。这个类应该是这样的:
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
Toast.makeText(parent.getContext(), "The planet is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
AdapterView.OnItemSelectedListener 需要 onItemSelected() 和 onNothingSelected() 回调方法。前者在 AdapterView 中的项目被选中时被调用,在这种情况下,一个简短的 Toast 消息显示所选文本; and the latter is called when a selection disappears from the AdapterView, which doesn't happen in this case, so it's ignored. 现在需要将 MyOnItemSelectedListener 应用到 Spinner。回到 onCreate() 方法,在末尾添加以下行: spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
换句话说,您需要创建一个 OnItemSelectedListener 来修改第二个微调器的值,并将其附加到第一个微调器。
【讨论】:
您必须将条件放在第一个微调器的 onItemSelected 上。通过此示例,您可以根据第一个微调器获得第二个微调器的值:
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
if(arg0.equals(spin0)){
spin1.setClickable(true);
if(spin0.getSelectedItem().equals("India"))
{
ArrayAdapter <String> s1 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_india);
s1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s1);
}
else if(spin0.getSelectedItem().equals("Pakistan"))
{
ArrayAdapter <String> s2 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_pak);
s2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s2);
}
else if(spin0.getSelectedItem().equals("China"))
{
ArrayAdapter <String> s3 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_china);
s3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s3);
}
}
}
【讨论】:
您应该为每个微调器分别定义 onItemSelected()。否则,如果从任一微调器中选择任何内容,则代码将被执行。
newCategory.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
String selCat = newCategory.getItemAtPosition(arg2).toString();
if (selCat != "New")
{
loadSpinnerData(topic);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
newTopic.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
loadSpinnerData()
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
【讨论】: