CursorAdapter中setFilterQueryProvider()和runQueryOnBackgroundThread()之间有什么区别?

Owe*_*hao 3 android android-cursoradapter

我不太明白,提供商是指ContentProvider吗?或者我认为它们是一样的.

有任何想法吗?

Owe*_*hao 5

感谢@Luksprog给我的回复.另外,我已经阅读了CursorAdapter,CursorFilter和Filter的源代码.事实证明,CursorFilter扩展了Filter,而CursorAdapter实现了Filterable和CursorFilter.CursorFilterClient.

因此,如果您调用getFilter.filter(s),您将获得新光标,并自动将CursorAdapter重置为新光标.

但是如果你打电话runQueryOnBackgroundThread(s),你只会得到一个新光标.所以你不需要手动调用它.

此外,由于过滤器将调用runQueryOnBackgroundThread(s)runQueryOnBackgroundThread(s)将调用FilterQueryProvider.runQuery(s).设置重新查询代码的最佳方法是调用

CursorAdpapter adapter;
adapter.setFilterQueryProvider(new FilterQueryProvider() {
        @Override
        public Cursor runQuery(CharSequence constraint) {
            ...
            return db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
        }
    });
Run Code Online (Sandbox Code Playgroud)

然后adapter.getFilter().filter(s);在需要重新查询时使用.