2017-04-18 312 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(); 
     } 
    }; 
} 

這是我的數據對象:過濾器不工作

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

} 數據對象用於單個parkinggarage的物品相互連接

我創建這個過濾器,我這樣稱呼它:adapter.getFilter.filter(newText)但不知何故我的適配器RecyclerView不會改變,有誰能幫我解決這個問題嗎?

+0

參見[這](https://gist.github.com/pskink/cd3bbdd742b5b1905a790c76831b5d85)通用適配器 - 注意'匹配()'方法所使用用於過濾目的 – pskink

回答

0

您需要在代碼中進行一些修改。您將新的過濾數據插入到不同的arrylist中,因此在調用notifydatasetchanged()之後,它不會過濾數據。

首先聲明舊列表數據到另一個列表變量,那麼請更改像下面

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

然後在你的搜索調用此濾波方法。

希望這會有所幫助..

@拉傑什

+0

字符串s應該是Data s - >這也行不通,它不會顯示任何結果。它在我的recyclerview中沒有顯示任何內容 –

+0

你能解釋一下這裏的數據嗎?它是一個帶有String變量的模型類嗎? –

+0

查看第一篇文章。我發佈了「數據」 –