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代码。如果您定义了一个列表,并且在不替换或清除它的情况下不断向其中添加内容,您将拥有重复的项目。您不断向“设备”列表添加设备。好的,我解决了错误,现在引出我的第二个问题,当我单击设备名称或地址时,如何连接到它