多个旋转器的简单疑问

4

我是新手安卓开发者,尝试创建一个有两个下拉菜单的应用程序...

在深入我的应用程序之前,我有一些疑问需要澄清。

  1. 一个视图中是否可以有两个下拉菜单?
  2. 答:是的,您可以在一个视图中有两个下拉菜单。
  3. 我可以为两个下拉菜单都添加 setOnItemSelectedListener(this) 吗?
  4. 答:是的,您可以为两个下拉菜单都添加此监听器。
  5. 如果可以,如何知道两���下拉菜单所选的选项?像这样的 spinner.getSelectedItemPosition(); 在两个下拉菜单上都行吗?
  6. 答:是的,您可以使用相同的方法来获取两个下拉菜单中所选的选项。但是,您需要使用不同的变量名存储它们以避免混淆。

期待您宝贵的回复。参考资料也是可取的。


我也有一个问题:尝试一下会有什么坏处吗?可以在一个小的样例项目中或者在一个源代码控制下的项目中进行尝试,如果结果不满意,可以随时回退。 - user658042
4个回答

14

是的,您可以拥有多个旋转器,这些旋转器可以由单个监听器管理,或者您可以为每个旋转器单独设置监听器。

对于单个监听器,您可以这样做:

设置监听器

spinner1.setOnItemSelectedListener(this);
spinner2.setOnItemSelectedListener(this);

然后,您可以使用onItemSelected来执行与下拉列表相关的操作。

    @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                                                      int position,long arg3) 
        {
        int id = parent.getId();
        switch (id) 
        {
                case R.id.spinner1:
                // your stuff here
                break;
            case R.id.spinner2:
               // your stuff here
            break;
        }

1

请查看:

Spinner spinner0、spinner1、spinner2; TextView textView0、textView1、textView2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView0 = (TextView) findViewById(R.id.text0);
    spinner0 = (Spinner) findViewById(R.id.spinner0);

    ArrayAdapter<String> adapter0 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, text0);
    adapter0.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner0.setAdapter(adapter0);
    spinner0.setOnItemSelectedListener(onItemSelectedListener0);

    textView1 = (TextView) findViewById(R.id.text1);
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, text1);
    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner1.setAdapter(adapter1);
    spinner1.setSelection(0,false); //make sure only one listener is 

//在onCreate方法中通过将另一个监听器设置为false来激活 spinner1.setOnItemSelectedListener(onItemSelectedListener1);

    textView2 = (TextView) findViewById(R.id.text2);
    spinner2 = (Spinner) findViewById(R.id.spinner2);
    MySpinnerAdapter adapter2 = new MySpinnerAdapter(MainActivity.this, android.R.layout.simple_spinner_item, obj2);
    //adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner2.setAdapter(adapter2);
   spinner2.setSelection(0,false);
    spinner2.setOnItemSelectedListener(onItemSelectedListener2);

}

OnItemSelectedListener onItemSelectedListener0 = new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
      //do your stuff spinner0
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    }
};

OnItemSelectedListener onItemSelectedListener1 = new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //do your stuff spinner1
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    }

};

OnItemSelectedListener onItemSelectedListener2 = new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //do your stuff spinner2
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    }

};

}


欢迎来到SO。显然这个答案付出了很多努力,但如果只是代码的话可能会难以理解。通常在解决方案中加上几句注释是很正常的。请编辑您的答案并添加一些解释。 - Mika Sundland

0
  1. 是的
  2. 是的
  3. spinner1.getSelectedItemPosition()spinner2.getSelectedItemPosition()

我这样做了。现在我可以在警报中打印第二个微调器的值。但是当我尝试对第一个微调器执行相同操作时,它显示错误。 “应用程序MultiSpinner(进程com.myApps)意外停止。请重试[强制关闭]” - Dil Se...

0
如果两个微调器的引用不同(如果您使用了两个微调器),请为它们分配不同的ID,这样您就可以唯一地识别它们。是的,您可以单独为它们设置点击监听器。
spinner.setOnItemSelectedListener(new OnItemSelectedListener() { ... } );
spinner1.setOnItemSelectedListener(new OnItemSelectedListener() { ... } );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接