我有一个应用程序,它在按钮(切换按钮)上按下扫描并在自定义列表视图中显示发现的蓝牙设备,再次按下相同的按钮时扫描停止。Listview显示重复扫描的蓝牙设备的重复条目
现在问题出现,当我再次按下按钮(第二次)开始扫描时,同一设备显示两次。停止并开始扫描(第三次)后,同一设备显示三次。所发现的设备从未与我的android手机配对。
还有一个类似的question,但答案并没有帮助我。请让我知道我出错的地方。
下面是代码
btOnOff.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(btOnOff.isChecked()){
btAdapter.startDiscovery();
setProgressBarIndeterminateVisibility(true);
bcReceiver = 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 device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
deviceName = device.getName();
currentDateTime = DateFormat.getDateTimeInstance().format(new Date());
Custom data = new Custom(deviceName, currentDateTime);
fetch.add(data);
lv.setAdapter(cAdapter);
}else if(btAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){
btAdapter.startDiscovery();
}
}
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(bcReceiver, filter);
} else {
btAdapter.cancelDiscovery();
}
}
});
我还有两节课这确实列表视图的定制,莫不是什么,以避免重复的条目。下面是第一类文件的代码
public class CustomAdapter extends ArrayAdapter<Custom>{
private ArrayList<Custom> entries;
private Activity activity;
public CustomAdapter(Activity a, int textViewResourceId, ArrayList<Custom> entries) {
super(a, textViewResourceId, entries);
// TODO Auto-generated constructor stub
this.entries = entries;
this.activity = a;
}
public static class ViewHolder{
public TextView tv1;
public TextView tv2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
ViewHolder holder;
if(v == null){
LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.show_devices, null);
holder = new ViewHolder();
holder.tv1 = (TextView) v.findViewById(R.id.tv1);
holder.tv2 = (TextView) v.findViewById(R.id.tv2);
v.setTag(holder);
}else{
holder = (ViewHolder)v.getTag();
}
final Custom custom = entries.get(position);
if(custom != null){
holder.tv1.setText(custom.getFirst());
holder.tv2.setText(custom.getSecond());
}
return v;
}
}
第二类文件
public class Custom {
private String text1;
private String text2;
public Custom(String string1, String string2){
this.text1 = string1;
this.text2 = string2;
}
public String getFirst(){
return text1;
}
public void setFirst(String text1){
this.text1 = text1;
}
public String getSecond(){
return text2;
}
public void setSecond(String text2){
this.text2 = text2;
}
}
在我开始发现设备之前,我使用cAdapter.clear()清除了列表。扫描开始时,列表被清除,但稍后在同一台设备上列出旧时间戳。 – User210282
即使使用fetch.clear()也不会清除列表。 – User210282
所以你想说重新扫描之前清单不清除?它包含以前结果的元素? –