我系统中有两个下拉框。现在我需要根据第一个下拉框的值来更改第二个下拉框的选定值。当用户更改第一个下拉框的值时,第二个下拉框的值将自动设置为取决于第一个下拉框的选定值。如何实现这个功能?
来自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来修改第二个Spinner的值,并将其附加到第一个Spinner上。
您需要在第一个下拉框的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);
}
}
}
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
}
});