Зачеркнутый текст в списке Android

#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() реализации.