java - 根据其他微调器设置微调器

标签 java android android-spinner

我正在为 Android 制作一个应用程序。我有 2 个微调器,当我在第一个微调器(simpleSpinner)中选择一项时,它需要显示它(我已经这样做了),但是当我选择一个时从我的第二个微调器(multiSpinner)我希望我的simpleSpinner返回到微调器中的第一个项目。相反,当我在 simpleSpinner 中选择一个时,我希望我的 multiSpinner 显示 simpleSpinner 中的第一项。我该怎么做?

 final ArrayAdapter<String> ar1 = new ArrayAdapter<String>(this,
                R.layout.my_spinner, arrSimple);
        final ArrayAdapter<String> ar2 = new ArrayAdapter<String>(this,
                R.layout.my_spinner, arrMulti);

        spSimple.setAdapter(ar1);
        spMulti.setAdapter(ar2);

        AdapterView.OnItemSelectedListener simpleListen = new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                String simpleText = spSimple.getSelectedItem().toString();

                if("Rouge".equals(simpleText)){
                    spMulti.setSelection(0);
                }
            }

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

            }
        };

        AdapterView.OnItemSelectedListener multiListen = new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                String multiText = spMulti.getSelectedItem().toString();

                if("Plein".equals(multiText)){
                    spSimple.setSelection(0);
                }
            }

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

            }
        };
    spSimple.setOnItemSelectedListener(simpleListen);
    spMulti.setOnItemSelectedListener(multiListen);

代码现在可以运行了!感谢@BlackPanther

最佳答案

您应该为您的Spinners使用单独的监听器。由于您对两个 Spinner 这段代码使用相同的监听器

if("Rouge".equals(simpleText)){
    spMulti.setSelection(0);
}

导致你的问题。

当您在第一个 Spinner 中首次选择“Rouge”时,第二个微调器将设置为“Wahie”,现在当您尝试更改第二个 Spinner 中的项目时>,调用相同的方法,并且由于第一个 Spinner 的选择位于“Rouge”中,因此第二个 Spinner 再次设置为“Wahie”..

在您的 onCreate 方法中执行类似的操作

@Override
public void onCreate(Bundle savedInstanceState) {
  //your code

  addListenerOnSpinnerItemSelection();

  //more of your code
}

public void addListenerOnSpinnerItemSelection() {
  spMulti = (Spinner) findViewById(R.id.spMulti);
  spMulti.setOnItemSelectedListener(new CustomOnItemSelectedListener());
}

您可以创建一个实现OnItemSelectedListener的自定义监听器类

参见this article 。您可以对其进行改编并根据您的需要进行定制。

您可以通过以下代码对两个微调器使用相同的监听器

Spinner spinner = (Spinner) parent;
 if(spinner.getId() == R.id.spSimple)
 {
   //do this                    
 }
 else if(spinner.getId() == R.id.spMulti)
 {
   //do this
 }

关于java - 根据其他微调器设置微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23558448/

相关文章:

java - Java中执行的Bash命令如果被切断

java - 防止未经授权访问由 servlet 定义的 Web 服务

android - 当用户单击上下文菜单中的禁用项时调用哪个事件?

java - Android Java 最小化时获取

java - 如何捕获 Room 持久性库中未处理的异常

android - 登录 ADT 布局编辑器

Android Spinner - How to position dropdown arrow as close to text as possible when options have different length?

Android 水平 ScrollView ,具有类似旋转器的功能

android - 微调器 : get state or get notified when opens

java - JSpinner 源?