0

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() 是在数据更新、光标交换之前进行的。

4

2 回答 2

0

您是否尝试过ListView.setItemChecked(int position, boolean checked)listView.smoothScrollToPosition(position)(如果您的 API >= 8)?

于 2012-12-14T14:50:59.603 回答
0

找到了答案。没有办法通过过滤器更新 setSelection() 但覆盖 CursorAdapter 的 changeCursor 方法就可以了!

@Override
    public void changeCursor(Cursor cursor) {
        super.changeCursor(cursor);

        listView.setSelection(0);
    }
于 2012-12-14T15:14:28.137 回答