Heinz Meier Ответов: 1

Как заполнить listview в android текстом и флажком?


Вот мои требования к приложению для Android:
- Есть файл со строками текста и "x" в качестве маркера "готово"
- Текстовые строки должны отображаться в списке на экране при запуске приложения
- Каждая строка списка должна иметь флажок
- Флажок должен быть изначально отмечен, если в соответствующей текстовой строке находится буква "x"
- Пользователь может нажать на флажок, чтобы изменить маркер "готово"
- При выходе из приложения в файл записываются текущие состояния "готово"

Или вкратце: простой "список дел", который запоминает состояние "сделано" каждой записи.

Проблема в том, что после чтения и вставки текстовых строк в ListView я вызываю "setItemChecked", чтобы установить начальное состояние "готово". Это никак не влияет на экран. Все пункты по-прежнему помечены как "не сделано". Если я вызываю "isItemChecked" непосредственно после установки его в "true", ответ будет "false". Таким образом, вызов "setItemChecked" игнорируется.

Это и есть код:

protected void onCreate (Bundle savedInstanceState)
{
  super.onCreate (savedInstanceState);
  setContentView (R.layout.activity_main);

  lv = (ListView) findViewById (R.id.List);
}

protected void onResume ()
{
  super.onResume ();
  ReadEntriesFromFile (); // this fills the "Entries" and "Checks" arrays
  adap = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, Entries);
  lv.setAdapter (adap); // the texts get copied to the list

  int i;
  for (i=0; i<Entries.length; i+=1)
  {
    lv.setItemChecked (i, Checks[i]); // set the "Done" marker
  }
  lv.invalidate ();
  lv.invalidateViews ();
  adap.notifyDataSetChanged ();
}


Что я делаю не так?

Что я уже пробовал:

Если вы нашли в сети, что вызов "invalidate", "invalidateViews" или "notifyDataSetChanged" должен помочь, но они не имеют никакого эффекта.

David Crow

Делает R.id.List у вас есть android:choiceMode установлен в multipleChoice?

Другой способ-создать свой собственный пользовательский макет строки, содержащий CheckBox и TextView.

1 Ответов

Рейтинг:
0

Heinz Meier

Спасибо, Дэвид, это решение проблемы:

Любой
- установите атрибут ListView "choiceMode" на "multipleChoice" в Редакторе макета активности

или
- установите атрибут ListView в java-коде действия:
lv = (ListView) findViewById (R. id.List);
lv.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE);