0

首先对不起我的英语,这很糟糕。现在我正在编写一个应用程序并且列表有问题。搜索设备后,我的列表中总是出现重复项,当我再次搜索时,我再次获得相同的设备。我必须尝试使用​​集合,但我仍然得到重复。我不知道如何解决这个问题。请帮助某人使用代码。谢谢你提前。

这是我的代码:

`

    public void Init(){
    foundDevicesSet = new HashSet<String>();
    tBtn = (ToggleButton)findViewById(R.id.toggleButton1);
    availableDivce = (TextView)findViewById(R.id.textView2);    
    bluetoohOff =(TextView)findViewById(R.id.textView1);        
    DeviceList = (ListView)findViewById(R.id.listView1);    
    searchButton =(Button)findViewById(R.id.button1);           
    deviceNameAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1);         
    DeviceList.setAdapter(deviceNameAdapter);
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(receiver, filter);
    receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub

            String action = intent.getAction();             

            if (BluetoothDevice.ACTION_FOUND.equals(action)) {                                  
            BluetoothDevice newDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);                    
            if (newDevice.getBondState() != BluetoothDevice.BOND_BONDED) {                       
                foundDevicesSet.add(newDevice.getName() + "|" + newDevice.getAddress());                        

                for(String one : foundDevicesSet){                      
                deviceNameAdapter.add(one);
                }


                }                               
                }
                }       
    };      



}   `
4

2 回答 2

2

我也在一个蓝牙项目中,5分钟前我也遇到了同样的问题,不是配对设备,而是周围可用的设备。这是使它在没有任何重复设备的情况下工作的代码。我必须说我正在使用 ListView 来显示它们和 ArrayAdapter:

if (mNewDevicesArrayAdapter.getPosition((device.getName()+ "\n" + device.getAddress())) == -1)
{
    mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
    mNewDevicesArrayAdapter.notifyDataSetChanged();                  
}

该指令device.getName() + "\n" + device.getAddress()在 ArrayAdapter 中查找它,因为这是我用来保存它的格式。希望它对您有所帮助。

于 2014-02-05T11:35:28.290 回答
0

每次找到新设备时,您都会再次将整个设备集添加到适配器......所以,要么:

  • 调用deviceNameAdapter.add(newDevice.getName() + "|" + newDevice.getAddress());而不是将其添加到集合中。
  • deviceNameAdapter.clear()在将整个集合添加到适配器之前调用。
于 2013-11-01T18:25:23.337 回答