【问题标题】:Android SearchView widget NOT in actionbarAndroid SearchView 小部件不在操作栏中
【发布时间】:2015-07-20 00:22:04
【问题描述】:

我想在我的布局中添加一个 searchView 并将其放置在我想要的位置,不幸的是我能找到的只是将它添加到操作栏。我尝试将 searchView 小部件拖到活动的布局中,但不确定从那里去哪里(它在设计上弹出了大量空指针异常)。

我已遵循本指南:http://developer.android.com/guide/topics/search/search-dialog.html 并成功在操作栏中创建了一个 searchView,这对于那个 SearchableActivity 来说非常有用。现在我想进入我的另一个活动,比如 MainActivity,并向其中添加一个 searchView 小部件,我不想将它放入操作栏中。

我该怎么做?按照指南,我已经有了我的 SearchableActivity 和配置。

【问题讨论】:

  • 你想搜索你的列表吗?
  • @DhirajDevkar 不是在这种情况下,我想查询一个在线数据库,我在我的 SearchableActivity 中做了。不过,我也想知道如何搜索我的列表以供将来参考。
  • @DhirajDevkar 是否也可以使用 searchView 小部件进行多个可搜索活动?我目前有一种设置可以在在线数据库中搜索一种类型的数据,但我也想搜索不同的数据并以不同的布局显示。

标签: android android-layout searchview


【解决方案1】:

你可以用这个搜索你的列表视图。这里我使用editte1xtSearch,您将在其中添加要搜索的文本。

  editTextSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2,
                                      int arg3) {

                String text = edSearch.getText().toString();
                NameListAdapter.filter(text);
            }
                @Override
                public void beforeTextChanged(CharSequence cs, int arg1, int arg2,
                                              int arg3) {
                }
                @Override
                public void afterTextChanged(Editable cs) {
                }
            });

添加如下过滤方法:

// Filter method for search
public void filter(String charText) {
    charText = charText.toLowerCase(Locale.getDefault());
    NameArrayList.clear();
    int j;
    if (charText.length() == 0) {
        NameArrayList.addAll(arrayList);
    }
    else
    {
        NameArrayList.clear();
        for (j=0;j<arrayList.size();j++)
        {

       if(arrayList.get(j).toLowerCase(Locale.getDefault()).contains(charText))
            {
                NameArrayList.add((arrayList.get(j)));
            }
        }
    }
    notifyDataSetChanged();
}

【讨论】: