SimpleCursorAdapterに裏打ちされたListViewがあります。
入力するだけで、連絡先リストと同じようにリストをフィルタリングできるようにしたいと思います。textFilterEnabled()に出くわしました。
問題は、SimpleCursorAdapterで動作させる方法がわからなかったことです。
これも可能ですか?
もしそうなら、それはどのように行われますか?
setTextFilterEnabled()
メソッドは、Cursor
のwhatを知らないため、フィルタリングを自動的に実装しません。テキストはフィルタリングする必要があります。
この Android-developersスレッド 詳細があります。
実は、先日、あなたの質問と非常によく似た良い質問がありました。もともとは、デバイスに物理キーボードがない場合にフィルタリングを処理する方法を尋ねていましたが、次のようになります。
SimpleCursorAdapterカーソルの場合、制約に基づいてカーソルに対して別のクエリを実行するには、setFilterQueryProviderを使用するだけで済みます。
m_Adapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
Log.d(LOG_TAG, "runQuery constraint:"+constraint);
//uri, projection, and sortOrder might be the same as previous
//but you might want a new selection, based on your filter content (constraint)
Cursor cur = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
return cur; //now your adapter will have the new filtered content
}
});
制約が追加された場合(たとえば、TextViewを使用して)、アダプターをフィルター処理する必要があります。
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d(LOG_TAG, "Filter:"+s);
if (m_slvAdapter!=null) {
m_Adapter.getFilter().filter(s);
}
}
お役に立てれば。数日中にソースコードを含む完全な記事を書こうと思います。
この記事は役に立ちました http://androidcookbook.oreilly.com/Recipe.seam;jsessionid=CE37400B3E545937B70BE2E9F94E78BB?recipeId=404
基本的に、リストビューでsetTextFilterEnabled(true)
を使用し、SimpleCursorAdapter
でsetStringConversionColumn()
とsetFilterQueryProvider()
を使用します。