5

アプリに検索を実装したいのですが、別のアクティビティを使用して検索結果を表示したくありません。代わりに、SearchView.

で使用setOnQueryTextListenerしてSearchView、入力をリッスンし、結果を検索できます。しかし、これらの結果を の下のリストに追加するにはどうすればよいSearchViewですか? で検索していると仮定しましょうList<String>

4

2 に答える 2

3

作成する必要があるのはContent Providerです。このようにして、カスタム結果を SearchView に追加し、ユーザーが何かを入力するたびにオートコンプリート機能を追加できます。

私の記憶が間違っていなければ、私のプロジェクトの 1 つで似たようなことをしましたが、それほど時間はかかりませんでした。

私はこれが役立つと信じています:代わりに AutoCompleteTextView を ActionBar の SearchView に変えてください

また、これ: SearchManager - カスタム提案の追加

お役に立てれば。

N.

于 2012-10-22T09:30:34.533 に答える
1

検索文字列を取る EditText を使用して、アプリケーションに検索を実装しました。
そして、この EditText の下に、検索を実行したい ListView があります。

<EditText
    android:id="@+id/searchInput"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/input_patch"
    android:gravity="center_vertical"
    android:hint="@string/search_text"
    android:lines="1"
    android:textColor="@android:color/white"
    android:textSize="16sp" >
</EditText>
<ListView
    android:id="@+id/appsList"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/searchInput"
    android:cacheColorHint="#00000000" >
</ListView>  

検索 EditText の下のリストは、EditText に入力された検索テキストに応じて変化します。

etSearch = (EditText) findViewById(R.id.searchInput);
etSearch.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        searchList();
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
});  

関数 searchList() は実際の検索を行います

  private void searchList() {
    String s = etSearch.getText().toString();
    int textlength = s.length();
    String sApp;
    ArrayList<String> appsListSort = new ArrayList<String>();
    int appSize = list.size();
    for (int i = 0; i < appSize; i++) {
        sApp = list.get(i);
        if (textlength <= sApp.length()) {
            if (s.equalsIgnoreCase((String) sApp.subSequence(0, textlength))) {
                appsListSort.add(list.get(i));
            }
        }
    }
    list.clear();
    for (int j = 0; j < appsListSort.size(); j++) {
        list.add(appsListSort.get(j));
    }
    adapter.notifyDataSetChanged();
}  

これは、ListView に表示され、 ListView アダプターlistである ArrayList です。 これが何らかの形で役立つことを願っています。adapter

于 2012-10-22T13:07:08.083 に答える