根据微调器项目选择更新 ArrayAdapter

Posted

技术标签:

【中文标题】根据微调器项目选择更新 ArrayAdapter【英文标题】:Update ArrayAdapter depending on spinner item selection 【发布时间】:2016-05-19 07:09:46 【问题描述】:

我有一个活动,用户可以在微调器上选择一些产品类别。由于我有 14 个类别以避免ScrollView 开销,因此用户可以将微调器(最多 14 个)动态添加到ScrollView。我的目标是避免选定项目中的重复项。例如:如果用户选择类别A,则必须将其从ArrayAdapter 中删除且不可选择,如果用户决定将类别A 更改为B,则A 必须再次可用。有什么可能的解决方案?

更新 我有以下想法

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
            //Create temporary array list
            ArrayList<String> tempArray = new ArrayList<>();
           //Go trough all spinners and add selected items to temp array list
            for(int i =1001; i<categorySpinnerId-1; i++)
                tempArray.add(((Spinner)findViewById(i)).getSelectedItem().toString());
            
            //Remove from original array list items of temp array list
            categoryArrayList.removeAll(tempArray);
            categorySpinnerAdapter.notifyDataSetChanged();
        

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

        
    );

但在这种情况下,我收到了以下问题。例如,用户添加了 5 个微调器。第一个 spinners 有所有 14 个选项,第二个 13(不包括第一个选项),第三个 12(不包括第一个和第二个选项)等等。新创建的微调器选择不会影响以前的微调器选项列表。

【问题讨论】:

你为此做了什么。提供您的代码 sn-p.. 【参考方案1】:

使用一个动态数组,您可以在其中存储所有微调器条目,而没有选定的条目。

例子:

完整数组:A, B, C, D, E

假设用户选择B

所以你做类似的事情

for (String a : originalArray) 
    if (!a.equals("B")) 
        tempArray.add(a);
    

然后将tempArray 设置为微调器视图适配器。

【讨论】:

【参考方案2】:

使用 HashSet 它不会允许重复: `HashSet h=new HashSet(); h.add("a"); h.add("a"); h.add("b"); h.add("c");

    System.out.println(" sdsadsd="+h); `

检查这个例子

link1

link2

【讨论】:

请附上示例链接

以上是关于根据微调器项目选择更新 ArrayAdapter的主要内容,如果未能解决你的问题,请参考以下文章

从SQlite引入数据时,微调器选择不起作用

在活动一中选择的微调项目上,必须更改第二个活动中的文本视图

如何根据 android studio 中的微调器选择更改 imageview 视图?

在选择项目之前设置微调器的文本

更改微调器项目数据时更新recyclerview单行数据

如何根据两个不同活动中其他微调器的位置更改微调器的位置