5

我想在我的应用程序中实现搜索,但我不想使用单独的 Activity 来显示我的搜索结果。相反,我只想使用显示在SearchView.

我可以setOnQueryTextListener在 上使用SearchView,监听输入并搜索结果。但是如何将这些结果添加到下面的列表中SearchView?让我们假设我正在搜索一个List<String>.

4

2 回答 2

3

您需要创建的是Content Provider。通过这种方式,您可以向 SearchView 添加自定义结果,并在用户输入内容时向其中添加自动完成功能。

如果我没记错的话,在我的一个项目中,我做过类似的事情,而且时间不长。

我相信这可能会有所帮助:Turn AutoCompleteTextView into a SearchView in ActionBar instead

还有这个: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();
}  

list是显示在 ListView 中的 ArrayList 并且adapter是 ListView 适配器。
我希望这对您有所帮助。

于 2012-10-22T13:07:08.083 回答