【问题标题】:notifyDataSetChanged() duplicates existing arrayList contentnotifyDataSetChanged() 复制现有的 arrayList 内容
【发布时间】:2018-05-25 05:23:01
【问题描述】:

我正在制作一个程序,它会寻找与手机蓝牙设备配对的设备,显示它们和它们的地址以供用户查看,并且当用户已经在他的手机中打开 Bt 时它工作正常。当他不这样做时会出现问题,导致添加到 arrayList 中的数据重复。我使用了一个while循环,所以它只在打开Bt模块后检查配对设备,这是在onResume()上做这样的好方法吗?

【问题讨论】:

    标签: java android arraylist bluetooth


    【解决方案1】:

    快速解决方法是检查String 是否已存在于您的数据源列表中。像这样的

     for (BluetoothDevice device: pairedDevice) {
         String name = device.getName();
         String address = device.getAddress();
         String toBeAdded = address + " " + name;
         if (!QueryDevices_final.contains(toBeAdded) {
                 QueryDevices_final.add(toBeAdded);
                 arrayAdapter.notifyDataSetChanged();
             }
         }
    

    【讨论】:

      【解决方案2】:

      你不能把你的 checkBluetoothState() 放在 onCreate 方法中吗?并根据结果调用数组创建的东西?

      根据您应用的开发方式,可以多次调用 onResume。为避免这种情况,您可以:

      • 创建一个共享首选项/标志并仅调用一次(firstRun=true 并在运行一次时将其更新为 false),然后根据该标志创建和更新数组,

        李>
      • 在该类中创建一个公共变量,并仅在第一次运行该代码时。最后改变量。

      • 更改活动的实施方式,以便 onResume 只运行一次。

      您还可以查看此答案并尝试了解您的应用在哪里调用了两次 onResume: Why is my onResume being called twice?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        • 2011-05-22
        相关资源
        最近更新 更多