如何获取根据数据库结果动态生成的CheckBox的选中状态
动态生成CheckBox选中状态获取方案
你已经在生成控件时维护了checkBoxes数组存储所有CheckBox实例,直接遍历该数组判断选中状态是性能最优的实现方式,不需要额外遍历父容器查询控件。
基础实现代码(获取所有选中的表名)
// 存储所有选中的表名 List<string> selectedTables = new List<string>(); foreach (var cb in checkBoxes) { if (cb.Checked) { selectedTables.Add(cb.Text); } } // 后续可直接使用selectedTables处理业务逻辑
可选替代方案(无需维护CheckBox数组)
如果你后续不想再全局维护checkBoxes数组,也可以直接遍历CheckBox的父布局,筛选出所有CheckBox控件再判断状态:
List<string> selectedTables = new List<string>(); // 此处lineView为你添加CheckBox的父LinearLayout容器 for (int i = 0; i < lineView.ChildCount; i++) { if (lineView.GetChildAt(i) is CheckBox cb && cb.Checked) { selectedTables.Add(cb.Text); } }
实现优化建议
- 你当前使用
Array.Resize动态扩容数组的实现性能较差,建议将存储CheckBox的容器改为List<CheckBox>,无需手动处理扩容逻辑,使用更便捷:// 初始化替换为List List<CheckBox> checkBoxes = new List<CheckBox>(); // 循环内添加实例直接调用Add方法即可 checkBoxes.Add(checkBox); - 若需要实时监听选中状态变化,不需要等到用户主动触发查询操作,可在创建CheckBox时直接绑定
CheckedChange事件:checkBox.CheckedChange += (sender, args) => { var currentCheckBox = sender as CheckBox; if (args.IsChecked) { // 此处写选中后的逻辑 } else { // 此处写取消选中后的逻辑 } };
内容的提问来源于stack exchange,提问作者OhNo
相关产品推荐
相关产品推荐

