1

我正在使用 SimpleCursorAdapter,但我不确定为什么它只在某些时候起作用。如果我重做相同的查询,我会得到不同的绑定。尽管我知道,但它与光标的含义无关。

我要做的就是将 TextView 设置为 null 如果cursor.getString(cursor.getColumnIndex(...))为空。它有时有效,但并非一直有效。当然,这使得调试非常困难。我在 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 创建随机内容这个答案似乎有点类似于我的问题,但我不确定这是否是相同的原因。

4

1 回答 1

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;
    }
于 2014-01-14T14:58:59.783 回答