Как определить связанный виджет при нажатии на элемент списка? - PullRequest
0 голосов
/ 20 февраля 2012

Мне удалось создать функцию ListActivity, которая отображает верхний и нижний колонтитулы и помещена между ними в пользовательский макет, содержащий в каждой строке три флажка и имя контакта (чтение из базы данных контактов). Я использую SimpleCursorAdapter для отображения этой информации. Моя проблема в получении OnListItemClicked () * для запуска. Я нажимаю в ListView (на флажки И на имя контакта), и моя точка останова никогда не достигается. Итак: что я должен сделать, чтобы получить это уволить. Я ЕСМЬ настраиваю это так:

lv.SetOnListItemClicked(etc);
  • Я думаю, что это так; Я не нахожусь на моей машине разработчика сейчас

Но даже если мне удастся запустить событие click, как я смогу определить соответствующие флажки? Они называются ckbx1, ckbx2 и ckbx3 (или около того) в файле макета, но их будет (Contacts.Count), так как я могу точно определить, какие из них были нажаты?

Мой другой вариант - динамически создавать виджеты в OnCreate () в Activity.

Мой псевдокод для этого следующий, и я открыт для предложений / отзывов о том, делает ли это или [не] лучший способ сделать это:

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), очевидно, очень грубо, но я думаю, что вы можете получить суть того, что я собираюсь сделать с этим - сохранение «проверенного» состояния Checkboxes в БД SQLite, чтобы я знал Contact1 хочет получить электронную почту (или ленту Twitter, или что-то, что указывают другие два флажка).

Так можно ли использовать мой предыдущий метод или я должен пойти по этому новому пути (или немного отклониться от этого?)

1 Ответ

1 голос
/ 20 февраля 2012

Обычно я использую View.setTag для идентификации экземпляра представления.Например,

checkBox.setTag("listItem1");
...