1)创建CursorAdapter或SimpleCursorAdapter以呈现列表。
2)现在向下滚动一下列表,这样你就不会处于位置0。
3)现在执行您已创建的CursorAdapter过滤器。
结果:
过滤器正确更新数据,并使用新数据更新列表视图。
最大的问题是列表位置/选择保持在您之前的位置(如果新结果中有足够的行)。
我想在我的过滤器中执行setSelection(0)以始终将位置设置为0但不知道如何操作。对明显的任何建议?
dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
listView.setSelection(0);
return newCursor;
});
由于在更新数据,光标交换之前进行了setSelection(),因此上述操作无效。
答案 0 :(得分:0)
您是否尝试过ListView.setItemChecked(int position, boolean checked)
或listView.smoothScrollToPosition(position)
(如果您是API> = 8)?
答案 1 :(得分:0)
找到答案。没有办法通过过滤器更新setSelection(),但是覆盖CursorAdapter的changeCursor方法就可以了!
@Override
public void changeCursor(Cursor cursor) {
super.changeCursor(cursor);
listView.setSelection(0);
}