我的系统中有两个微调器。现在我必须根据第一个微调器值更改第二个微调器的选定值。一旦用户更改第一个微调器值,第二个微调器值将根据第一个微调器的选定值自动设置。如何实现这个?
答案 0 :(得分:17)
来自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消息显示所选文本;当选择从AdapterView中消失时调用后者,在这种情况下不会发生,所以它被忽略了。 现在需要将MyOnItemSelectedListener应用于Spinner。返回onCreate()方法并将以下行添加到结尾: spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
换句话说,您需要创建一个OnItemSelectedListener来修改第二个微调器的值,并将其附加到第一个微调器。
答案 1 :(得分:3)
你必须把条件放在第一个微调器的 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);
}
}
}
答案 2 :(得分:1)
您应该为每个微调器单独定义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
}
});