ViewBinder setViewValue有时只能工作

时间:2013-06-16 19:01:19

标签: android simplecursoradapter android-viewbinder

我正在使用SimpleCursorAdapter而且我不确定为什么这有时只会起作用。如果我重做相同的查询,我得到不同的绑定。虽然我知道它与光标有什么关系。

如果cursor.getString(cursor.getColumnIndex(...))为空,我想要做的就是将TextView设置为null。它有时有效,但不是所有时间。这使得当然很难进行调试。我注意到在LogCat中它似乎获得了正确的值,并且当它不为null时将其设置为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这个答案似乎与我的问题类似,但我不确定是否是同样的原因。

1 个答案:

答案 0 :(得分: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;
    }