我已经能够创建一个显示页眉和页脚的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需要电子邮件(或推特提要,或其他两个复选框指示的内容)。
我以前的方法是否可以挽救,或者我应该沿着这条新路走下去(还是稍微偏离它?)