多次显示相同的 Adapter obj,但为什么呢?
Same Adapter obj shown multiple times, but why?
我做了一个自定义的 Listview 和 Listviewadapter。不知何故,相同的数据在我的列表视图中多次显示,但我不知道为什么。
我调试了一下,好像没有双加
如您所见,我通过使用 .contains 控制适配器的输入,但这没有帮助。
广播接收器
private BroadcastReceiver BR_BT_Device= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action_BR_BT_Device= intent.getAction();
if(action_BR_BT_Device.equals(BluetoothDevice.ACTION_FOUND))
{
BluetoothDevice device =
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (!device.equals(null)) {
String sDevice_Address = device.getAddress();
if (!(sDevice_Address == null)) {
if (device.getName() == null){
mDeviceName = "Kein Name";
}
else {
mDeviceName = device.getName();
}
cBT_DeviceList mDevice = new
cBT_DeviceList(mDeviceName, sDevice_Address);
if (!(cBT_popup.mBTDevice.contains(mDevice))) {
cBT_popup.mBTDevice.add(mDevice);
cBT_popup.cBTDeviceListAdapter.notifyDataSetChanged();
}
}
}
Log.d("Resiver", "onReceive: "+device.getAddress());
}
}
};
Activity 用于列表视图对象
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);
}
}
如果您需要更多信息,请告诉我。
如果这很重要:无法突出显示所选项目,目前不知道为什么。
广播的 IntentFilter
´´´
IntentFilter BT_Device_filter = 新
IntentFilter(BluetoothDevice.ACTION_FOUND);
´´´
可能是 onRecieve 被同一个 BluetoothDevice 调用了多次。
试试这个...替换
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();
}
我做了一个自定义的 Listview 和 Listviewadapter。不知何故,相同的数据在我的列表视图中多次显示,但我不知道为什么。
我调试了一下,好像没有双加
如您所见,我通过使用 .contains 控制适配器的输入,但这没有帮助。
广播接收器
private BroadcastReceiver BR_BT_Device= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action_BR_BT_Device= intent.getAction();
if(action_BR_BT_Device.equals(BluetoothDevice.ACTION_FOUND))
{
BluetoothDevice device =
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (!device.equals(null)) {
String sDevice_Address = device.getAddress();
if (!(sDevice_Address == null)) {
if (device.getName() == null){
mDeviceName = "Kein Name";
}
else {
mDeviceName = device.getName();
}
cBT_DeviceList mDevice = new
cBT_DeviceList(mDeviceName, sDevice_Address);
if (!(cBT_popup.mBTDevice.contains(mDevice))) {
cBT_popup.mBTDevice.add(mDevice);
cBT_popup.cBTDeviceListAdapter.notifyDataSetChanged();
}
}
}
Log.d("Resiver", "onReceive: "+device.getAddress());
}
}
};
Activity 用于列表视图对象
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);
}
}
如果您需要更多信息,请告诉我。
如果这很重要:无法突出显示所选项目,目前不知道为什么。
广播的 IntentFilter
´´´
IntentFilter BT_Device_filter = 新
IntentFilter(BluetoothDevice.ACTION_FOUND);
´´´
可能是 onRecieve 被同一个 BluetoothDevice 调用了多次。
试试这个...替换
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();
}