Как заполнить 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
.