2011-03-07 46 views
16

我在我的系统中有两个微调。现在,我必须根据第一个微调器值更改第二个微调器的选定值。只要用户更改第一个微调器值,第二个微调器值就会根据第一个微调器的选定值自动设置。如何实现这一点?微调价值变动

回答

15

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需要被应用到微调。返回到onCreate()方法和下面的行添加到末尾: spinner.setOnItemSelectedListener(新MyOnItemSelectedListener());

换句话说,您需要创建一个OnItemSelectedListener,它修改第二个微调器的值,并将其附加到第一个微调器。

+0

难道不使用“implements”就可以实现吗? – 2011-03-07 13:57:45

+2

我不明白这个问题。您可以创建一个实现接口的匿名类,不过是你必须在某个时候创建​​一个实现,为了接口,其添加为微调侦听器的对象。 – I82Much 2011-03-07 17:59:46

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); 
        } 

     } 

    }  
+0

微调控件不支持项目点击事件。调用此方法将引发异常。而是使用AdapterView setOnItemSelectedListener。 – felansu 2017-09-12 05:37:20

1

您需要单独定义onItemSelected()每个微调。否则,如果从任何一个spinners中选择了任何内容,代码将被执行。

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 
     } 
    }); 
+1

setOnItemClickListener不能与微调 – sandeep 2014-03-13 18:45:13

+0

使用该作品,如果好,如果你超过飞旋在当前活动 - 不知道为什么向下票..... – DVN 2015-06-26 15:28:47