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

时间:2012-02-20 12:45:04

标签: android android-layout android-widget android-listview android-contacts

我已经能够创建一个显示页眉和页脚的ListActivity,并夹在这些自定义布局之间,每个行包含三个复选框和一个联系人名称(从Contacts数据库中读取)。我使用SimpleCursorAdapter来显示此信息。我的问题是让OnListItemClicked()*触发。我单击ListView(在联系人姓名的复选框和AND上),我的断点永远不会到达。所以:我必须做些什么来解决这个问题。我设置它,就像这样:

lv.SetOnListItemClicked(etc);
  • 我认为是;我现在不在我的开发机器上

但即使我能够触发点击事件,我怎样才能识别相关的复选框?它们在布局文件中被命名为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事件处理程序)显然非常粗糙,但我认为你可以得到我正在使用的地方的漂移 - 将Checkbox的“已检查”状态保存到SQLite DB以便我知道Contact1需要电子邮件(或推特提要,或其他两个复选框指示的内容)。

我以前的方法是否可以挽救,或者我应该沿着这条新路走下去(还是稍微偏离它?)

1 个答案:

答案 0 :(得分:1)

通常我使用View.setTag来标识视图实例。例如,

checkBox.setTag("listItem1");