2017-10-16 3 views
-2

Ich versuche eine Suche auf meinem Recycler-Adapter durchzuführen, wenn onQueryTextChange wie unten gezeigt wird.Suchfilter Recycler Adapter

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); 
       } 
      } 

Und ich Filter den Adapter mit dem setFilter.

adapterRV.setFilter(search_list); 

Dies ist die setFilter Funktion in meinem Adapter

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

Die Suche funktioniert gut, onQueryTextChange , aber nach dem Adapter Filterung und auf dem RecyclerView anzeigt, wenn ich auf dem gefilterten klicken/gesucht Element in meiner Recycleransicht öffnet es nicht diesen bestimmten Eintrag, sondern öffnet einen anderen Eintrag, der nicht in der gefilterten Liste enthalten ist.

+0

hier Ihre gesamte Adapter Code Sachen hinzufügen. – Radhey

Antwort

0

Probieren Sie dies stattdessen aus. Weisen Sie search_list der vorhandenen Array-Liste zu.

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

Du APPEN in Ihrem Arraylist Datenelement des gefiltert, deshalb Ihr Adapter Display, die nicht auf der gefilterten Liste ist. versuchen, diese löschen Ihre Arraylist vor Gefiltert Element in Ihrem Arraylist Hinzufügen

Versuchen Sie, diese

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

    or 
    mHymnsList = search_list; 

    //notify to reload 
    notifyDataSetChanged(); 
} 
Verwandte Themen