我正在使用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这个答案似乎与我的问题类似,但我不确定是否是同样的原因。
答案 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;
}