You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发 Spinner下拉列表加载数据出现重复值问题

Spinner下拉列表重复值问题排查结果

问题原因

  • 代码中原本用于去重的HashMap存储逻辑被注释,直接将接口返回的所有Sm条目对应的运营商名称、金额原样存入数组传给Spinner适配器,只要返回的列表中存在同运营商、同金额的条目,Spinner就会展示重复值。
  • 从日志可以看到smsListItem被多次打印,需确认loadSmsData方法是否存在重复调用的情况,若每次调用都叠加数据未清空旧列表,也会导致重复值。
  • 接口返回的Sm列表本身可能存在业务层面的重复属性:不同Sm对象的运营商名称、金额字段值完全相同,属于正常业务场景,必须做去重处理。

修复方案

替换loadSmsData方法中else分支的数据源处理逻辑,使用LinkedHashSet做去重同时保留条目顺序,示例代码如下:

else {
    // 改用LinkedHashSet存储,自动去重且保留插入顺序
    LinkedHashSet<String> operatorSet = new LinkedHashSet<>();
    LinkedHashSet<String> amountSet = new LinkedHashSet<>();
    for (int x = 0; x < size; x++) {
        long amount = smsListitem.get(x).getPrice();
        Network network = smsListitem.get(x).getNetwork();
        phoneNum = smsListitem.get(x).getShortcode().toString();
        amountSet.add(String.valueOf(amount));
        if (LngID == 0) {
            operatorSet.add(network.getAr());
        } else if (LngID == 1) {
            operatorSet.add(network.getEn());
        }
    }
    // 转成列表适配Spinner
    List<String> operatorList = new ArrayList<>(operatorSet);
    List<String> amountList = new ArrayList<>(amountSet);

    ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
            android.R.layout.simple_spinner_item, operatorList);
    operspiner.setAdapter(adapter);

    ArrayAdapter<String> adapteramount = new ArrayAdapter<>(getActivity(),
            android.R.layout.simple_spinner_item, amountList);
    amountspiner.setAdapter(adapteramount);

    // 原有选中监听逻辑保持不变,注意如果需要匹配原始Sm对象,不要直接用position索引原始smsListitem,需通过选中值匹配对应条目
    amountspiner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            SpinerItemAmount = amountspiner.getSelectedItem().toString();
            post = position;
        }
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });
}

额外检查项:确认每次请求接口更新smsListitem时,是否先调用了clear()清空旧数据再添加新返回的条目,避免列表数据重复叠加。

内容的提问来源于stack exchange,提问作者Mahmoud Al-Haroon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:15:04