Java 同一适配器obj多次显示,但为什么?

Java 同一适配器obj多次显示,但为什么?,java,android,android-listview,android-arrayadapter,Java,Android,Android Listview,Android Arrayadapter,我制作了一个自定义的Listview和Listviewadapter。不知何故,相同的数据在我的Listview中多次显示,但我不知道为什么 我试图调试它,但它似乎没有被双重添加 如您所见,我通过使用.contains控制适配器的输入,但这没有帮助 Brodcastereceiver Listview对象的活动 公共类cBT\u弹出窗口扩展活动{ publicstaticarraylistmbtdevice=new ArrayList(); 公共列表视图lv_设备; 公共静态cBT_Device

我制作了一个自定义的Listview和Listviewadapter。不知何故,相同的数据在我的Listview中多次显示,但我不知道为什么

我试图调试它,但它似乎没有被双重添加

如您所见,我通过使用.contains控制适配器的输入,但这没有帮助

Brodcastereceiver Listview对象的活动
公共类cBT\u弹出窗口扩展活动{
publicstaticarraylistmbtdevice=new
ArrayList();
公共列表视图lv_设备;
公共静态cBT_DeviceList_适配器cBTDeviceListAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.bt_弹出窗口);
lv_设备=findViewById(R.id.lv_设备);
cBTDeviceListAdapter=新的cBT_DeviceList_适配器(此,
R.layout.lrv_bt_列表视图,MBT设备);
lv_设备。设置适配器(cBTDeviceListAdapter);
lv_设备。setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
}
如果你需要更多的信息,请告诉我

如果这很重要:无法突出显示所选项目,此时不知道原因

广播用意向过滤器 ' IntentFilter BT_设备_过滤器=新建
IntentFilter(BluetoothDevice.ACTION\u已找到)


''''

可能在收到同一蓝牙设备的多次调用后生效

试试这个。。。替换

if (!(cBT_popup.mBTDevice.contains(mDevice))) {
        cBT_popup.mBTDevice.add(mDevice);

        cBT_popup.cBTDeviceListAdapter.notifyDataSetChanged();
    }


添加您的完整代码。您的BroadcastReceiver何时会被envoke?我试图上载完整代码,但Stack overvlow不希望我这样做。在这种情况下,我可以假设同一Bluetooth设备多次调用您的onReceive。这是可能的,但是“.contains”是否应该停止此操作?没有cBT_弹出窗口。mBTDevice.contains(mDevice)不会限制已添加的设备,由于mDevice是新创建的对象,因此它将与列表项不匹配。我将给出答案代码,再试一次。它会将收到的设备名与所有添加的设备名进行比较。谢谢您的帮助。
    public class cBT_popup extends MainActivity {
        public static ArrayList<cBT_DeviceList> mBTDevice = new
                ArrayList<cBT_DeviceList>();
        public ListView lv_devices;
        public static cBT_DeviceList_Adapter cBTDeviceListAdapter;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.bt_popup);
            lv_devices = findViewById(R.id.lv_devices);
            cBTDeviceListAdapter = new cBT_DeviceList_Adapter(this,
                    R.layout.lrv_bt_listview, mBTDevice);
            lv_devices.setAdapter(cBTDeviceListAdapter);
            lv_devices.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        }
    }
if (!(cBT_popup.mBTDevice.contains(mDevice))) {
        cBT_popup.mBTDevice.add(mDevice);

        cBT_popup.cBTDeviceListAdapter.notifyDataSetChanged();
    }
boolean alreadyExist = false;
    for(cBT_DeviceList mBTDeviceObj : mBTDevice){
        if(mDevice.getName().equals(mBTDeviceObj.getName())){
            alreadyExist = true;
        }
    }
    if (!alreadyExist) {
        cBT_popup.mBTDevice.add(mDevice);
        cBT_popup.cBTDeviceListAdapter.notifyDataSetChanged();
    }