【问题标题】:Filter a recycleview using searchview and search suggestions and voice search使用 searchview 和搜索建议以及语音搜索过滤回收视图
【发布时间】:2018-02-18 11:01:09
【问题描述】:

Android general search functionality 似乎有很好的系统支持来显示搜索建议,例如最近的查询建议和自定义建议,以及语音搜索。

此框架需要声明一个搜索活动。该活动获取意图中的查询,并将搜索结果呈现给 ListView。

对此我有两个问题:

1- 我想在当前活动中进行搜索(我在 appbar 上有一个搜索视图)。那么,该活动是否会重新启动?那会很奇怪。我应该发送到不可见的活动并取回结果吗?这可能吗?

2- 我可以使用 RecyclerView 代替 ListView 吗?我认为 ListView 已被弃用,取而代之的是 RecyclerView。

【问题讨论】:

    标签: android listview search


    【解决方案1】:

    我想在当前活动中进行搜索(我有一个搜索视图 在应用程序栏上)。那么,该活动是否会重新启动?

    没有。 (当然如果你实现了搜索权)

    我可以使用 RecyclerView 代替 ListView 吗?我以为 ListView 是 已弃用,取而代之的是 RecyclerView。

    是的,您可以使用RecyclerView

    基本上,要在RecyclerView 中实现搜索,您必须在适配器类中创建一个公共方法,其中数据类的参数为List,如下所示:

     public void setFilter(ArrayList<Items> ItemList){
        Items = new ArrayList<>();
        Items.addAll(ItemList);
        notifyDataSetChanged();
      //Items will be your custom data class
    }
    

    然后在你的Activity 中你想在实现SearchView.OnQueryTextListener 接口和覆盖方法onQueryTextSubmitonQueryTextChange 之后在onQueryTextChange 中实现搜索,你可以这样做:

     @Override
    public boolean onQueryTextChange(String newText) {
        newText = newText.toLowerCase();
        ArrayList<Items> ItemArrayList = new ArrayList<>();
        for(Items Item : Items) //Items your data class containg data provided to adapter
        {
            String name = Item.getTitle().toLowerCase(); // getTitle or getName dependes what you have in Item class
            if(name.contains(newText))
                ItemArrayList.add(Item);
        }
        adapter.setFilter(ItemArrayList); // adapter will be instance of adapter class
        return true;
    }
    

    【讨论】:

    • 这没问题,但是如何添加建议和语音搜索?
    • 我会尝试在适配器中创建新的内部类并扩展Filter 和语音搜索,也许只是在将语音转换为字符串调用onQueryTextChange 提供转换后的单词作为参数之后尝试。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2018-02-11
    相关资源
    最近更新 更多