如何在过滤操作后在CursorAdapter上执行ListView setSelection(0)?

时间:2012-12-14 14:37:33

标签: android android-cursoradapter

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(),因此上述操作无效。

2 个答案:

答案 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);
    }