using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter { /// /// 设备选择的界面 /// public class SelectDeviceForm : UserCenterCommonForm { /// /// 设备选择确定后的回调函数(此函数在点击确认后,会先关闭界面再执行回调方法,与ActionSelectDeviceEx不共存) /// public Action> ActionSelectDevice = null; /// /// 设备选择确定后的回调函数(此函数在点击确认后,不会关闭界面,与ActionSelectDevice不共存,关闭界面请调用CloseForm函数) /// public Action> ActionSelectDeviceEx = null; /// /// 列表控件 /// private VerticalScrolViewLayout listView = null; /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 需要显示设备列表(有些界面需要剔除一些不要的设备) /// 指定哪些设备的初始状态为选中状态(设备的主键) /// 初始选中状态的设备能否取消 true:可以 false:不允许 public void ShowForm(List i_listShowDevice, List i_listSelectDevice, bool SelcetCancel = true) { //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uSelectDevice)); //完成 var btnfinish = new TopLayoutFinshView(); topFrameLayout.AddChidren(btnfinish); btnfinish.MouseUpEventHandler += (sender, e) => { List listDevice = this.GetDeviceFromRow(); if (ActionSelectDeviceEx != null) { ActionSelectDeviceEx(listDevice); return; } this.CloseForm(); if (ActionSelectDevice != null) { ActionSelectDevice(listDevice); } }; listView = new VerticalScrolViewLayout(); listView.Height = bodyFrameLayout.Height; bodyFrameLayout.AddChidren(listView); //添加所有设备行 this.AddAllDeviceRow(i_listShowDevice, i_listSelectDevice, SelcetCancel); } /// /// 添加所有设备行 /// /// 设备列表 /// 指定哪些设备的初始状态为选中状态(设备的主键) /// 初始选中状态的设备能否取消 true:可以 false:不允许 private void AddAllDeviceRow(List i_listShowDevice, List i_listSelectDevice, bool SelcetCancel = true) { new System.Threading.Thread(() => { foreach (CommonDevice device in i_listShowDevice) { Application.RunOnMainThread(() => { //添加明细行 this.AddDeviceRow(device, i_listSelectDevice, SelcetCancel); }); } }) { IsBackground = true }.Start(); } /// /// 添加设备行 /// /// 设备 /// 指定哪些设备的初始状态为选中状态(设备的主键) /// 初始选中状态的设备能否取消 true:可以 false:不允许 private void AddDeviceRow(CommonDevice device, List i_listSelectDevice, bool SelcetCancel = true) { var row = new DeviceSelectRow(listView, device); //设置选择状态 string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); if (i_listSelectDevice.Contains(mainKeys) == true) { row.SelectCancel = SelcetCancel; row.IsSelected = true; } } /// /// 获取选中的设备 /// /// private List GetDeviceFromRow() { List listDevice = new List(); for (int i = 0; ; i++) { var row = (DeviceSelectRow)this.listView.GetChildren(i); if (row == null) { break; } if (row.IsSelected == true) { listDevice.Add(row.device); } } return listDevice; } } }