C# 列表视图生成重复数据以及从列表视图单击时如何连接到设备
我在C# 列表视图生成重复数据以及从列表视图单击时如何连接到设备,c#,android,xamarin.android,android-bluetooth,C#,Android,Xamarin.android,Android Bluetooth,我在列表视图方面遇到了一个问题,每当我搜索蓝牙设备时,它都会像往常一样显示可用设备的列表,但在第二次单击时,它会生成重复项,因为第一次扫描的结果仍然保留,因此如何在用户每次单击要扫描的按钮时消除第一次扫描的结果,并在最终用户单击设备的地址或名称时连接到蓝牙设备 MainActivity.cs public class BTReceiver : BroadcastReceiver { public override void OnReceive(Context conte
列表视图
方面遇到了一个问题,每当我搜索蓝牙设备时,它都会像往常一样显示可用设备的列表,但在第二次单击时,它会生成重复项,因为第一次扫描的结果仍然保留,因此如何在用户每次单击要扫描的按钮时消除第一次扫描的结果,并在最终用户单击设备的地址或名称时连接到蓝牙设备
MainActivity.cs
public class BTReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
var application = context.ApplicationContext;
string action = intent.Action;
if (action == BluetoothDevice.ActionFound)
{
BluetoothDevice device = intent.GetParcelableExtra(BluetoothDevice.ExtraDevice) as BluetoothDevice;
devices.Add(new Devices(device.Name, device.Address));
Devices item = list.First(d => d.name == device.Name);
//if devices does not exist in the list, add it in
if (item != null)
{
return;
}
aadapter = new CustomAdapter(_instance, devices);
availableList.Adapter = aadapter;
aadapter.NotifyDataSetChanged();
Toast toast = Toast.MakeText(Android.App.Application.Context, device.Name, ToastLength.Long);
toast.Show();
}
}
}
public class Devices
{
string _name;
string _address;
public string Name { get { return _name; } set { _name = value; } }
public string Address { get { return _address; } set { _address = value; } }
public Devices(string name, string address)
{
Name = name;
Address = address;
}
}
设备.cs
public class BTReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
var application = context.ApplicationContext;
string action = intent.Action;
if (action == BluetoothDevice.ActionFound)
{
BluetoothDevice device = intent.GetParcelableExtra(BluetoothDevice.ExtraDevice) as BluetoothDevice;
devices.Add(new Devices(device.Name, device.Address));
Devices item = list.First(d => d.name == device.Name);
//if devices does not exist in the list, add it in
if (item != null)
{
return;
}
aadapter = new CustomAdapter(_instance, devices);
availableList.Adapter = aadapter;
aadapter.NotifyDataSetChanged();
Toast toast = Toast.MakeText(Android.App.Application.Context, device.Name, ToastLength.Long);
toast.Show();
}
}
}
public class Devices
{
string _name;
string _address;
public string Name { get { return _name; } set { _name = value; } }
public string Address { get { return _address; } set { _address = value; } }
public Devices(string name, string address)
{
Name = name;
Address = address;
}
}
BTDevice.cs又名我创建的自定义适配器
public class CustomAdapter : BaseAdapter<Devices>
{
private ObservableCollection<Devices> _devices;
private Activity _context;
public CustomAdapter(Activity context, ObservableCollection<Devices> devices) : base()
{
_context = context;
_devices = devices;
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var device = _devices[position];
View view = convertView;
if (view == null)
view = ((Activity)_context).LayoutInflater.Inflate(Resource.Layout.listView, null);
view.FindViewById<TextView>(Resource.Id.textName).Text = device.Name;
view.FindViewById<TextView>(Resource.Id.textAddress).Text = device.Address;
return view;
}
public override int Count
{
get { return _devices.Count; }
}
public override Devices this[int position]
{
get { return _devices[position]; }
}
}
公共类CustomAdapter:BaseAdapter
{
专用可观测采集设备;
私人活动——语境;
公共CustomAdapter(活动上下文,ObservableCollection设备):base()
{
_上下文=上下文;
_装置=装置;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
var设备=_设备[位置];
视图=转换视图;
如果(视图==null)
视图=((活动)\上下文).LayoutInflater.Inflate(Resource.Layout.listView,null);
view.findviewbyd(Resource.Id.textName).Text=device.Name;
view.findviewbyd(Resource.Id.textAddress).Text=device.Address;
返回视图;
}
公共覆盖整数计数
{
获取{return\u devices.Count;}
}
公共覆盖设备此[int位置]
{
获取{返回_设备[位置];}
}
}
在向设备添加新内容之前,应先清除设备。
类似于
clear(devices)
devices.add(newdevice)
在添加新内容之前,应清除设备。 类似于
clear(devices)
devices.add(newdevice)
现在我的列表有一个错误,你知道吗?当前上下文中不存在名称“list”,我不确定应该使用哪个列表,因为每个列表都有一个错误,它只是一个sudo代码。如果您定义了一个列表,并且您在不替换或清除它的情况下不断向其中添加内容,那么您将拥有重复的项目。您不断向“设备”列表添加设备。好的,我解决了错误,现在引出我的第二个问题,当我单击设备名称或地址时,我如何连接到它现在我在列表中出现错误,你知道吗?名字“list”在当前上下文中不存在,我不确定应该使用哪个列表,因为每个列表都有错误,它只是一个sudo代码。如果您定义了一个列表,并且在不替换或清除它的情况下不断向其中添加内容,您将拥有重复的项目。您不断向“设备”列表添加设备。好的,我解决了错误,现在引出我的第二个问题,当我单击设备名称或地址时,如何连接到它