单击列表项时如何识别关联的小部件?
Posted
技术标签:
【中文标题】单击列表项时如何识别关联的小部件?【英文标题】:How to identify associated widget when list item is clicked? 【发布时间】:2012-03-10 19:19:25 【问题描述】:我已经能够创建一个显示页眉和页脚的 ListActivity,并在它们之间夹入一个自定义布局,其中每行包含三个复选框和一个联系人姓名(从联系人数据库中读取)。我使用 SimpleCursorAdapter 来显示此信息。我的问题是让 OnListItemClicked()* 触发。我单击 ListView(在复选框和联系人姓名上),我的断点从未到达。所以:我必须做什么才能让它着火。我正在设置它,如下所示:
lv.SetOnListItemClicked(etc);
我认为是;我现在不在我的开发机器旁
但即使我能够触发 click 事件,我将如何识别相关的复选框?它们在布局文件中被命名为ckbx1、ckbx2、ckbx3(左右),但是会有(Contacts.Count)个,那么如何才能确定哪些是被点击的呢?
我的另一个选择是在 Activity 的 OnCreate() 中动态创建小部件。
我的伪代码如下,我愿意接受关于这是否是[不是]最好方法的建议/反馈:
OnCreate()
Cursor c = getContacts();
for (i = 0, i == c.Count, i++)
int id = getContactID(i);
CheckBox ckbx1 = new CheckBox();
ckbx1.Tag = id;
ckbx1.OnClick = Checkbox1Click();
CheckBox ckbx2 = new CheckBox();
ckbx2.Tag = id;
ckbx2.OnClick = Checkbox2Click();
CheckBox ckbx3 = new CheckBox();
ckbx3.Tag = id;
ckbx3.OnClick = Checkbox3Click();
TextView tv = new TextView();
tv.Text = getContactName(i);
Checkbox1Click()
int ContactID = (CheckBox)object.Tag;
switch (ContactID)
case 1:
WriteToDB(1, Option1);
case 2:
WriteToDB(2, Option1);
...
这(尤其是 CheckboxClick 事件处理程序)显然非常粗糙,但我认为您可以了解我的目标 - 将复选框的“已选中”状态保存到 SQLite DB 以便我知道Contact1 想要电子邮件(或 twitter 提要,或其他两个复选框指示的任何内容)。
那么我以前的方法可以挽救吗,还是我应该走这条新路(或偏离这条路?)
【问题讨论】:
【参考方案1】:通常我使用View.setTag
来标识视图实例。例如,
checkBox.setTag("listItem1");
【讨论】:
以上是关于单击列表项时如何识别关联的小部件?的主要内容,如果未能解决你的问题,请参考以下文章
如何关闭在提升的小部件中单击的按钮上的 qt 小部件 ui?
Flutter Visibility with Condition(如何只隐藏一个有条件的小部件)