如何在Spinner中加载一个数组/字符串值列表,不包括一个值?

时间:2016-02-25 10:16:15

标签: android spinner

我需要使用以下规则创建两个Spinners(都显示位置列表):

假设我有一套通用的位置,如下:

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

考虑这4个列表中的位置位于上面列出的4条独特路线中。

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

一旦从Spinner-1中选择了一个位置,我想仅将Spinner-2(用作“To”位置选择器)填充到所选位置所在的特定路径上的那些位置。此外,我想从Spinner-1中排除选定的位置在Spinner-2中显示。

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

编制此要求的最佳机制是什么?

2 个答案:

答案 0 :(得分:1)

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

  1. 为第一个微调器创建一个数组和适配器。
  2. 在第一个微调器的onItemSelectedListener方法内,删除所选元素并将适配器设置为第二个微调器。
  3. 我们来看看

    您有ArrayList个这样的国家/地区

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

    你有两个微调器(旋转器和旋转器2)

    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
    

    您首先为spinner

    制作了适配器
    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的第二个spinner2

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

答案 1 :(得分:0)

试试这个

String[] regionsArray;
List<String> regions;
Spinner spinner;

regionsArray=getResources().getStringArray(R.array.Country_array);
regions=new ArrayList<String>();
regions = new ArrayList<String>(Arrays.asList(regionsArray));

/* selected item will look like a spinner set from XML */
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, regions);

spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);


/* Your ARRAY Defined in xml file */
<string-array name="Country_array">
  <item>India</item>
  <item>Japan</item>
  <item>China</item>
</string-array>