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;
    }
Другие вопросы по тегам