单击列表项时如何识别关联的小部件?

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(如何只隐藏一个有条件的小部件)

如何在 Flutter 的 ListView 中显示特定小部件的子小部件?

在颤动中单击按钮时添加小部件时处理动态复选框列表