2017-04-18 2 views
1
public Filter getFilter() { 
    return new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence charSequence) { 
      String charString = charSequence.toString(); 
      if (charString.isEmpty()) { 
       FilteredData = ArrayData; 
      } else { 
       ArrayList<Data> filteredList = new ArrayList<>(); 
       for (Data checkData: ArrayData) { 

        if (checkData.getNames().toLowerCase().contains(charString)) { 
         filteredList.add(checkData); 
        } 
       } 
       FilteredData = filteredList; 
      } 
      FilterResults filterResults = new FilterResults(); 
      filterResults.values = FilteredData; 
      return filterResults; 
     } 
     @Override 
     protected void publishResults(CharSequence charSequence, FilterResults filterResults) { 
      FilteredData = (ArrayList<Data>) filterResults.values; 
      notifyDataSetChanged(); 
     } 
    }; 
} 

Das ist mein Datenobjekt:Filter nicht funktioniert

public class Data { 
public String names; 
public String cPoints; 
public Double latitude; 
public Double longitude; 
public String code; 
public Float distance; 
public Integer spots; 
public int scale = 2; 
public Data(String n, String cP, Double lat, Double lon, String c, Float dis, Integer sp){ 
    names = n; 
    cPoints = cP; 
    latitude = lat; 
    longitude = lon; 
    code = c; 
    distance = dis; 
    spots = sp; 
} 
public String getNames(){ 
    return names; 
} 
public String getcPoints(){ 
    return cPoints; 
} 
public Double getLatitude(){ 
    return latitude; 
} 
public Double getLongitude(){ 
    return longitude; 
} 
public String getCode(){ 
    return code; 
} 
public Integer getSpots(){ 
    return spots; 
} 
public Double getDistance(){ 
    return Math.round(distance * Math.pow(10, scale))/Math.pow(10, scale); 
} 

} Das Datenobjekt verwendet wird, Elemente eines einzelnen Parkgarage zueinander

ich diesen Filter erstellt haben zu verbinden, und ich nenne es so: adapter.getFilter.filter(newText) aber irgendwie ändert sich mein Adapter RecyclerView nicht, könnte mir jemand helfen das zu beheben?

+0

siehe [diese] (https://gist.github.com/pskink/cd3bbdd742b5b1905a790c76831b5d85) generische Adapter - beachten Sie 'matches()' Methode, die verwendet wird, zum Filtern – pskink

Antwort

0

Sie müssen einige Änderungen in Ihrem Code vornehmen. Sie fügen neue gefilterte Daten in verschiedene Arrylist, also nach dem Aufruf notifydatasetchanged() wird es nicht Ihre Daten filtern.

Zuerst erklären alte Listendaten in eine andere Liste Variable dann wie verändern sich unter

public void filter(String charText) { 
    charText = charText.toLowerCase(Locale.getDefault()); 
    AllData = ArrayData; 
    if (charText.length() == 0) { 
     ArrayData = AllData; 
    } else { 
     ArrayData.clear(); 
     for (String s : AllData) { 
      if (s.toLowerCase(Locale.getDefault()).contains(charText)) { 
       ArrayData.add(s); 
      } 
     } 
    } 
    notifyDataSetChanged(); 
} 

dann in Ihre Suche Diese Filter-Methode aufrufen.

Hope this nützlich ..

@ Rajesh

+0

String s sollte Daten s sein -> auch das funktioniert nicht, es zeigt mir keine Ergebnisse. Es zeigt nichts in meinem recyclerview –

+0

Können Sie erklären, was Daten hier sind. Ist es eine Modellklasse mit String-Variablen? –

+0

Überprüfen Sie den ersten Beitrag. Ich postete "Daten" dort –