#android #database #listview #strikethrough
#Android #База данных #просмотр списка #зачеркнутый
Вопрос:
Я составляю список покупок в Android, для которого я сохраняю продукты в базе данных SQLite.
Продукты доступны для просмотра, так что они должны быть зачеркнуты. Обновление базы данных работает нормально, но зачеркивание выполняется не для правильного элемента. / ** * Загружает список из базы данных, помещает данные в Listview и перебирает неактивные продукты */
public void loadListe()
{
//---get all titles---
meineListe.clear();
adapter.clear();
db.open();
Cursor c = db.getAllTitles();
ArrayList<String> strikedItems = new ArrayList<String>();
strikedItems.clear();
if (c.moveToFirst())
{
do {
if (c.getInt( 0 )==1) {
meineListe.add(c.getString( 1 ));
strikedItems.add( c.getString( 1 ) );
}
else meineListe.add( c.getString( 1 ));
} while (c.moveToNext());
}
db.close();
//Strike Through on inactive Items
list = this.getListView();
for (int i = 0; i < list.getChildCount(); i ) {
LinearLayout row = (LinearLayout) list.getChildAt( i );
TextView title;
title = (TextView) row.getChildAt( 0 );
//System.out.println("zeile " i " " title.getText());
if(strikedItems.contains( title.getText() ))
{
title.setPaintFlags( Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
System.out.println("zeile " i " Title: " title.getText());
title.setTextColor(0xFFFF0000); //black
}
}
Ответ №1:
Дочерние представления ListView — это только те элементы, которые видны в данный момент, а не весь массив элементов.
Вы не повторяете их таким образом, вам нужно установить свойство strikeout из вашей Adapter.getView()
реализации.