繁体   English   中英

搜索过滤器回收器适配器

[英]Search Filter Recycler Adapter

我正在尝试在 onQueryTextChange 时对我的回收器适配器执行搜索,如下所示。

newText = newText.toLowerCase();
List<HymnDataModel> search_list = new ArrayList<>();

 for(HymnDataModel hymnDataModel : hymnDataList){
                String hymn_title = hymnDataModel.getHymnTitle().toLowerCase();
                String hymn_subTitle = hymnDataModel.getHymnSubTitle().toLowerCase();
                if (hymn_title.contains(newText) || hymn_subTitle.contains(newText)){
                    search_list.add(hymnDataModel);
                }
            }

我使用 setFilter 过滤适配器。

adapterRV.setFilter(search_list);

这是我的适配器中的 setFilter 函数

public void setFilter(List<HymnDataModel> search_list) {
    mHymnsList = new ArrayList<>();
    mHymnsList.addAll(search_list);
    //notify to reload
    notifyDataSetChanged();
}

搜索工作得很好, onQueryTextChange ,但是在过滤适配器并显示在 RecyclerView 上之后,当我在我的 recyclerview 上单击过滤/搜索的项目时,它不会打开该特定项目,而是打开另一个未打开的项目过滤后的列表。

试试这个。将 search_list 分配给现有的数组 List。

public void setFilter(List<HymnDataModel> search_list) {
    mHymnsList = search_list;
    //notify to reload 
    notifyDataSetChanged(); 
} 

您正在Arraylist中附加过滤的数据项,这就是为什么您的适配器显示项不在过滤列表中的原因。 试试这个清除你Arraylist在增加过滤项前Arraylist

尝试这个

public void setFilter(List<HymnDataModel> search_list) {
    mHymnsList.clear();
    mHymnsList.addAll(search_list);

    or 
     mHymnsList = search_list;

    //notify to reload
    notifyDataSetChanged();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM