价值变化的微调

时间:2011-03-07 12:51:55

标签: android spinner onchange

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

3 个答案:

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