8

現在、カスタム SimpleCursorAdapter に FilterQueryProvider を実装しようとして問題が発生しています。これは、FilterQueryProvider の runQuery 関数で何をすべきかわからないためです。

つまり、ListView を構成するクエリは、基本的にデータベースのテーブルから行 ID、名前、および 3 番目の列を取得するため、名前列の部分的な値に基づいてカーソルをフィルター処理できるようにしたいと考えています。

ただし、既存のカーソルをフィルタリングしたいので、DB クラスを拡張せずに runQuery から直接これを実行できるかどうか、または名前列を部分的に検索する DB クラスで新しいクエリ関数を作成する必要があるかどうかは不明です。もしそうなら、runQuery で CharSequence 制約引数を使用しながらクエリ ステートメントを作成するにはどうすればよいでしょうか?

問題の DB テーブルには約 1300 ~ 1400 行あるため、部分的なテキストに基づいて複数のクエリを実行しようとすると、パフォーマンスの問題も懸念されます。言い換えれば、カーソルをフィルタリングしようとしてボトルネックに遭遇するでしょうか?

4

1 に答える 1

3

新しいフィルタリングされたカーソルを返すクエリを実行する必要があります。

public class MyActivity extends ListActivity implements FilterQueryProvider {

    private Cursor cursor;

    @Override
    public Cursor runQuery(CharSequence constraint) {
        if(cursor != null) {
            cursor.close();
        }
        cursor = somehowGetAFilteredCursorFor(constraint);
        startManagingCursor(cursor);
        return cursor;
    }

}

于 2010-04-28T00:19:09.760 に答える