2013-06-16 2 views
1

Я использую SimpleCursorAdapter, и я не уверен, почему это работает только иногда. Если я повторю один и тот же запрос, я получаю разные привязки. Это не имеет никакого отношения к тому, что имеет курсор, хотя я знаю.ViewBinder setViewValue работает только иногда

Все, что я пытаюсь сделать, это установить TextView в null, если cursor.getString(cursor.getColumnIndex(...)) имеет значение NULL. Он работает иногда, но не все время. Конечно, это очень сложно отладить. Я заметил в 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 creates random content Этот ответ кажется похожим на мою проблему, но я не уверен, если это та же причина или нет.

+0

получил его работу с помощью настраиваемого CursorAdapter. видимо, один из взглядов не был виден. 'if (cursor.getString (cursor.getColumnIndex (" kanji ")) == null) { TextView kanjiTextView = (TextView) view.findViewById (R.id.kanji); kanjiTextView.setVisibility (View.GONE); } else { TextView kanjiTextView = (TextView) view.findViewById (R.id.kanji); kanjiTextView.setVisibility (View.VISIBLE); kanjiTextView.setText (cursor.getString (cursor.getColumnIndex ("кандзи"))); } ' – John61590

ответ

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; 
    } 
Смежные вопросы