3

よくわかりませんが、プロバイダーとは ContentProvider のことですか? あるいは同じだと思います。

何か案は?

4

2 に答える 2

5

@Luksprog からの返信に感謝します。また、CursorAdapter、CursorFilter、および Filter のソース コードを読みました。CursorFilter は Filter を拡張し、CursorAdapter は Filterable と CursorFilter.CursorFilterClient を実装していることがわかります。

したがって、 を呼び出すとgetFilter.filter(s)、新しいカーソルが取得され、CursorAdapter が新しいカーソルに自動的にリセットされます。

しかし、 を呼び出すとrunQueryOnBackgroundThread(s)、新しいカーソルしか得られません。したがって、手動で呼び出す必要はありません。

また、 filter が呼び出さ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);
        }
    });

次にadapter.getFilter().filter(s);、再クエリが必要なときに使用します。

于 2013-06-15T09:34:18.487 に答える