ViewBinder setViewValue работает только иногда
Я использую SimpleCursorAdapter, и я не уверен, почему это работает только иногда. Если я повторяю один и тот же запрос, я получаю разные привязки. Это не имеет ничего общего с тем, что имеет курсор, хотя я знаю.
Все, что я пытаюсь сделать, это установить TextView на ноль, если cursor.getString(cursor.getColumnIndex(...))
нулевой. Это работает иногда, но не всегда. Это очень затрудняет отладку, конечно. Я заметил в LogCat, что он, кажется, получает правильное значение и устанавливает его в textview, когда оно не равно нулю, но оно не обновляется в ListView. У меня есть длинный ListView в некоторых случаях, как 732 результатов. Когда я прокручиваю список, я вижу, что setViewValue вызывается и говорит, что он установил текст, но ничего не изменилось. TextView kanjiTextView = (TextView) view;
линия тоже никогда не была нулевой.
mAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex)
{
if (view.getId() == R.id.kanji)
{
if (cursor.getString(cursor.getColumnIndex("kanji")) == null)
{
view.setVisibility(View.GONE);
return true;
} else {
TextView kanjiTextView = (TextView) view;
kanjiTextView.setText(cursor.getString(cursor.getColumnIndex("kanji")));
return true;
}
}
return false;
}
Есть что-то, чего я здесь не хватает? Дайте мне знать, если мне нужно будет публиковать больше материалов LogCat.
ViewBinder создает случайный контент, этот ответ кажется похожим на мою проблему, но я не уверен, является ли это той же самой причиной или нет.
1 ответ
Спасибо за Ваш ответ! Чтобы уточнить тему для других:
Если вам нужно скрыть представление, в котором столбец курсора не имеет значения, и вы хотите показать его, если оно имеет значение, вам нужно снова сделать его видимым! Если вы этого не сделаете, он исчезнет после прокрутки.
Пример:
public boolean setViewValue(View view, Cursor cursor,
int columnIndex) {
final int commentCol = cursor.getColumnIndex(COMMENT);
// hide comment if empty
if (columnIndex == commentCol) {
if (cursor.isNull(commentCol)) {
view.setVisibility(View.GONE);
}
else {
view.setVisibility(View.VISIBLE);
((TextView)view).setText(cursor.getString(commentCol));
}
return true;
}
return false;
}