【问题标题】:ViewBinder setViewValue only working sometimesViewBinder setViewValue 有时只工作
【发布时间】:2013-06-12 18:23:40
【问题描述】:

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

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

【问题讨论】:

  • 使用自定义光标适配器让它工作。显然其中一个视图是不可见的。 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("kanji"))); }

标签: android simplecursoradapter android-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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多