我需要使用以下规则创建两个微调器(均显示位置列表):

假设我有如下一组通用位置:


印度,日本,中国,韩国,斯里兰卡,尼泊尔[路线1的地点]
美国,墨西哥,加拿大,牙买加[2号公路上的地点]
德国,法国,俄罗斯,西班牙,意大利[3号公路上的位置]
巴西,阿根廷,智利[4号公路上的地点]


请考虑,这4个列表中的位置位于上述4条唯一的路线上。

现在,我要填充Spinner-1中通用集中的所有位置(即,所有4条路线上的国家/地区),这些位置将用作“发件人”位置选择器。

从Spinner-1中选择位置后,我只想用显示在所选位置所在的特定路线上的那些位置填充Spinner-2(用作“收件人”位置选择器)。另外,我想从Spinner-1中排除所选位置,以便在Spinner-2中显示。

例如,如果从Spinner-1中选择了墨西哥,则Spinner-2应显示美国,加拿大,牙买加...

对这一要求进行编程的最佳机制是什么?

最佳答案

好的,我现在完成了,主要逻辑是


为第一个微调器创建阵列和适配器。
在第一个微调器的onItemSelectedListener方法内,删除选定的元素并将适配器设置为第二个微调器。


我们来看一下

您有一个这样的国家(cc)

final ArrayList<String> countries = new ArrayList<>();
    countries.add("India");
    countries.add("Japan");
    countries.add("China");
    countries.add("South Korea");
    countries.add("Nepal");


您有两个微调器(spinner和spinner2)

Spinner spinner1 = (Spinner) findViewById(R.id.mySpinner1);
final Spinner spinner2 = (Spinner) findViewById(R.id.mySpinner2); //It is final because it was accessed within inner class but if you don't want so then declare it as class level variable


您首先为ArrayList制作了适配器

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, countries);
        spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner1.setAdapter(spinnerArrayAdapter);


spinner的onItemSelected内部,从数组中删除选定的元素,并将适配器设置为第二个spinner,即spinner

spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                 ArrayList<String> tempCounties = (ArrayList<String>) countries.clone();

               tempCounties.remove(position);
               ArrayAdapter<String> spinnerArrayAdapter2 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, tempCounties);
               spinnerArrayAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
               spinner2.setAdapter(spinnerArrayAdapter2);
            }

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

            }
        });

关于android - 如何在Spinner中加载一个数组/字符串值列表(不包括一个值)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35624353/

10-12 06:05