, поэтому у меня есть эта огромная проблема с применением зачеркивания элемента ListView при заполнении его из списка моих объектов.Как зачеркнуть элемент ListView при заполнении ListView
private void setListItems() {
DatabaseHandler db = new DatabaseHandler(this);
List<ToDoTask> taskList = db.getAllTasks();
for (ToDoTask tt : taskList) {
this.listAdapter.add(tt.getName());
}
this.listAdapter.notifyDataSetChanged();
}
Эта часть кода заполняет мой ListView. Теперь я хочу, чтобы добавить зачеркивание к пункту, если
tt.getActive() == 0
Я не знаю, как я могу получить элемент TextView из моей ListView. Я пробовал в своем цикле:
TextView textView = (TextView) this.listView.getChildAt(this.listView.getCount() -1);
но приложение аварийно завершает работу. Единственное решение, которое не врезаться мое приложение было:
TextView textView = this.listAdapter.getView(this.listView.getCount() -1, null, null)
но это на самом деле не изменить что-либо в ListView. Я думаю, что это не относится к самому объекту. Вот код, который инициализирует свои переменные:
this.listView = (ListView) findViewById(R.id.listViewItem);
this.listItems = new ArrayList<String>();
this.listAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, this.listItems);
this.listView.setAdapter(this.listAdapter);
@ user3170934: И, в отношении элемента зачеркивания, вам нужно будет обезопасить себя с помощью 'StrikethroughSpan'. – CommonsWare
@Collin FLynn: Если я правильно вас понимаю, мне нужно получить элемент TextView, введя 'TextView tv = this.listAdapter.getView (this.listView.getCount() - 1, null, this.listView)'. Да, это дает мне объект TextView, но когда я устанавливаю флаги для этого парня, он не влияет на listView и listAdapter. Должен ли я сказать listAdapter, чтобы как-то обновить представление в заданной позиции? – user3170934
@ user3170934 Да, вы должны сказать адаптеру обновить представление. Один из способов - использовать шаблон «ViewHolder» в ваших интересах. Попросите адаптер сохранить позицию int внутри каждого «ViewHolder» для каждой строки. Напишите способ в своем адаптере, который принимает строку (независимо от вашей строки - некоторый вид) в качестве параметра. Из строки возьмите держатель вида и проверьте позицию int, чтобы увидеть, какой элемент находится в наборе данных. Вы должны сохранить это состояние как часть набора данных внутри адаптера, а внутри метода getView - проверить состояние представления, на которое вас попросили доставить, а затем построить его. –