ListView и запоминание данных - PullRequest
0 голосов
/ 06 августа 2011

У меня есть некоторые проблемы с ListView (это больше визуальная проблема), он запоминает данные, такие как текстовые значения из TextViews, из строк ListView, но запутывает или забывает аспекты, касающиеся TextViews цвет фона.Проблема проявляется только тогда, когда ListView содержит много строк.Я работаю с SimpleCursorAdapter и ViewBinder и хочу выделить TextView, если возникает условие:

В реализации ViewBinder:

public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
    CharSequence display;
    if(view.getId() == R.id.dueDate){
        long timestamp = Long.parseLong(cursor.getString(3));
        display=DateUtils.getRelativeTimeSpanString(timestamp); 

        if(timestamp+DaysToMillis(5)> new Date().getTime())
        ((TextView) view).setBackgroundResource(R.color.marker_red);

        ((TextView) view).setText(display);
        return true; 
    }
    else
        return false;
}

Итак, еще раз:когда есть много строк, ListView, кажется, запутывает цвет фона.Иногда, когда я перезаправляю, это снова меняет фон TextView, и я не могу найти ошибку или логику ListView.

Итак, setViewValue(..)метод вызывается каждый раз перед надуванием строки?Даже если вы прокрутите вверх или вниз, и строка, которая больше не видна, снова станет видимой?Или метод setViewValue(..) вызывается только для начального процесса раздувания строк, а затем созданные объекты сохраняются в памяти ListView?

PS Текстовые значения из того же TextView отображаются правильно,Я использовал ту же логику в том же методе setViewValue(..).

1 Ответ

0 голосов
/ 06 августа 2011

Тот же новичок

Мне кажется (и если я ошибаюсь, пожалуйста, поправьте меня ... особенно, если вы римский парень), что ViewBinder с его методом setViewValue перерабатывает строки listView ...

  • setViewValue (..) вызывается для каждой привязки "FROM - TO" для каждой отображаемой строки, даже для уже накачанных строк, и при прокрутке вверх / вниз они отображаются снова;

  • и относительно моего огромного фрагмента кода, для строки, которая отображается снова: ((TextView) view).setText(display); - установит правильный контент, будет обработана та же временная метка ... но если она не пройдет:

    if(timestamp+DaysToMillis(5)> new Date().getTime()) ((TextView) view).setBackgroundResource(R.color.marker_red); -Текущий TextView может иметь для фона фон из переработанного TextView

  • В любом случае мне пришлось добавить else ((TextView) view).setBackgroundResource(0); к моему if

...