搜索过滤器Recycler适配器

时间:2017-10-16 09:14:49

标签: java android android-recyclerview adapter searchview

我正在尝试在onQueryTextChange上对我的Recycler适配器执行搜索  如下图所示。

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上的过滤/搜索项目时,它不会打开该特定项目,而是打开另一个不在过滤列表中的项目。

2 个答案:

答案 0 :(得分:0)

请尝试此操作。将search_list分配给现有的数组列表。

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

答案 1 :(得分:0)

您要在Arraylist中附加已过滤的数据项,这是因为您的适配器显示的项目不在已过滤的列表中。在Arraylist

中添加过滤项目之前,请先清除Arraylist

试试这个

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

    or 
     mHymnsList = search_list;

    //notify to reload
    notifyDataSetChanged();
}