Android listView重复信息

时间:2015-09-14 16:50:40

标签: android android-listview bluetooth

我创建了一个蓝牙应用程序,这是我的设备代码:

Set<BluetoothDevice> paireddevices = bluetoothAdapter.getBondedDevices();

if(paireddevices.size() > 0)
{

    for(BluetoothDevice bluetoothDevice : paireddevices)
    {
        map = new HashMap<String, String>();
        map.put("titre", bluetoothAdapter.getName() + " - Appairé");
        map.put("description", bluetoothAdapter.getAddress());
        listItem.add(map);
    }
}

这是我的广播代码:

public void onClick(View v) {


        //chercher des nouveaux devices

        bluetoothAdapter.startDiscovery();

        broadcastReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (BluetoothDevice.ACTION_FOUND.equals(action)) {

                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                    map = new HashMap<String, String>();
                    map.put("titre", device.getName());
                    map.put("description", device.getAddress());
                    listItem.add(map);
                }
            }
        };

        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(broadcastReceiver, filter);

        mSchedule = new SimpleAdapter(this, listItem, R.layout.affichageitem, new String[] {"titre", "description"}, new int[] {R.id.titre, R.id.description});

        listview.setAdapter(mSchedule);

    }

一切正常,但当我点击获取设备时,我会得到一个多重信息,如果我仍然点击越来越多,我会得到更多的重复信息:(

http://www.hostingpics.net/viewer.php?id=48265220150914173852.jpg

我怎么才能得到一个LG G3D855和一个三星galaxy S5,以及一个HC-05 ......

谢谢

2 个答案:

答案 0 :(得分:0)

我建议使用此功能向listItem添加任何内容:

//WARNING I did not try this code, handle it as pseudo-code:
private void addIfNotContains(HashMap<String, String> map){
    boolean contains = false;
    for(HashMap<String, String> m : listItem){
        if(m.get("description").equals(map.get("description"))) contains = true;
    }
    if(!contains) listItem.add(map);
}

并使用每个地方而不是listItem.add(map) addIfNotContains(map)。我认为那会有用。

答案 1 :(得分:0)

我遇到了与服务相同的情况,我收回了关键事件并使用了arrayList.clear(); ,因此它将刷新以前的数据并覆盖新的数据 希望这会对你有所帮助