4

Android デベロッパーの皆様、こんにちは。

Android SearchViewウィジェットに問題があります。私がやろうとしているのは、「ライブ」テキスト フィルターを ListView にアタッチすることです (テキスト入力により、フィルター結果が自動的に更新されます)。それは実際には問題なく動作し、次の行を使用して ListActivity で動作させるのに大きな努力は必要ありませんでした:

private SearchView listFilter;

this.listFilter = (SearchView) findViewById(R.id.listFilter);
this.listFilter.setOnQueryTextListener(this);
this.listFilter.setSubmitButtonEnabled(false);

this.getListView().setOnItemClickListener(this);
this.getListView().setTextFilterEnabled(true);

// from OnQueryTextListener
public boolean onQueryTextChange(String newText) {
    if (newText.isEmpty()) {
        this.getListView().clearTextFilter();
    } else {
        this.getListView().setFilterText(newText);
    }
    return true;
}

そしてここで xml ウィジェット宣言

<SearchView
    android:id="@+id/listFilter"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:iconifiedByDefault="false"
    android:queryHint="enter text to filter" />

ここで私の問題は、SearchView にテキストを入力するたびに、奇妙なテキスト フィールドがポップアップして、入力したテキストと同じテキストが即座に表示されることです。私のリストのエントリを見てください。これはただ迷惑です。

SearchView への入力時にそのテキスト フィールドがポップアップしないようにする方法はありますか? xml 定義のウィジェット オプションにも Java クラス リファレンスにもプロパティが見つかりませんでした。

EditText と TextWatcher を使用してフィルター機能を提供する別の方法があることは知っていますが、フィルター処理をすべて自分で処理する必要があり、それを処理する SearchView から利益を得ることができませんでした。

任意の提案をいただければ幸いです。よろしくお願いします

フェリックス

4

1 に答える 1

5

あの見苦しいポップアップ ウィンドウを取り除く方法を見つけました。秘訣はフィルターを直接操作することです。以下のコードは、customAdapter にフィルター可能を実装していることを前提としています。

public boolean onQueryTextChange(String newText) {
    if (TextUtils.isEmpty(newText)) {
       m_listView.clearTextFilter();
    } else {
       ContactsAdapter ca = (ContactsAdapter)lv.getAdapter();
       ca.getFilter().filter(newText);
       //following line was causing the ugly popup window.
       //m_listView.setFilterText(newText);
    }
   return true;
}
于 2012-05-22T20:05:09.117 に答える