20
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

ListViewの内容をフィルタリングするメモ

ユーザ入力によってインタラクティブにリストの内容が絞り込まれるあれ

単純な文字列のリスト

公式Sampleにまんまの例がある.
ArrayAdapterは Filterable を実装しているので,ListViewの側で setOnQueryTextListenersetFilterText を適当に呼んであげれば良い.

SearchViewFilterMode.javaから適当に編集引用
public class SearchViewFilterMode extends Activity implements SearchView.OnQueryTextListener {
    protected void onCreate(Bundle savedInstanceState) {
        // (省略)
        mListView.setAdapter(mAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                mStrings));
        mListView.setTextFilterEnabled(true);
        mSearchView.setOnQueryTextListener(this);
        mSearchView.setSubmitButtonEnabled(false);
    }

    public boolean onQueryTextChange(String newText) {
        if (TextUtils.isEmpty(newText)) {
            mListView.clearTextFilter();
        } else {
            mListView.setFilterText(newText.toString());
        }
        return true;
    }

    public boolean onQueryTextSubmit(String query) {
        return false;
    }

ArrayAdapterにString以外を入れたい

文字だけのリストではなくて,アイコン等を含めるために自分の定義したオブジェクトを渡したいことがある.

androidでArrayAdapterを使う - @blog.justoneplanet.info

上記URLより,このときの注意点は以下の二点
- ArrayAdapter#getView をオーバライドするときは getItem(position メソッドによって position に対応する要素を取得する
- データクラスの toString() がフィルタに利用されるので, toString() を適切にオーバライドする

ポップアップで入力内容が表示させるのを無効化する

上述の方法でそのままListViewにフィルタをかけると,フィルタ文字列が半透明のポップアップで表示される.
filter_popup.png
(画像はStack Overflowより)

ワークアラウンドはいくつかありそうだけど, ListView#setFilterText を呼ぶ代わりに,直接Filterオブジェクトを操作するのが良さそうだ.(参考: http://stackoverflow.com/questions/7999083/how-do-i-remove-popup-text-from-listview-filter)

Filter filter = ((Filterable) listView.getAdapter()).getFilter();
filter.filter("search string");
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
20
Help us understand the problem. What are the problem?