嗨,我正在開發一個應用程序,我已經在fregement.i中實現回收視圖和searchview。根據文本更改第一次獲取過濾器產品。 但是當我逐個刪除文本時,所有列表都將爲空。最後可以顯示。searchview與回收視圖無法正常工作
這裏是我的fragement
嗨,我正在開發一個應用程序,我已經在fregement.i中實現回收視圖和searchview。根據文本更改第一次獲取過濾器產品。 但是當我逐個刪除文本時,所有列表都將爲空。最後可以顯示。searchview與回收視圖無法正常工作
這裏是我的fragement
我的代碼,我認爲這個問題是在filter
方法if (text.isEmpty()) {
塊。
這裏您清除plistarray
列表,並添加plistarray.addAll(plistarray);
而不是這一點,空列表添加原始數據列表爲plistarray.addAll();這將解決您的空列表問題。
記住這一點,當您執行搜索時,首先在適配器的構造函數中創建一個原始列表的虛擬/副本,並使用此虛擬來恢復數據。
希望這會解決你的問題。
正如我看到的主要問題是您正在操縱List
您的適配器從中填充,但您沒有原始數據集的「複製」。
像這樣的東西應該工作:
ArrayList<ProductList> plistarray; // these are instance variables
ArrayList<ProductList> plistarrayCopy; // in your adapter
// ...
public void filter(String text) {
if (plistarrayCopy == null) {
plistarrayCopy = new ArrayList<>(plistarray);
}
if (text.isEmpty()) {
plistarray.clear();
plistarray.addAll(plistarrayCopy);
plistarrayCopy = null;
} else {
text = text.toLowerCase();
ArrayList<Device> filteredList = new ArrayList<>();
for (ProductList pList : plistarrayCopy) {
if (pList.getPtitle().toLowerCase().contains(text)) {
filteredList.add(pList);
}
}
plistarray.clear();
plistarray.addAll(filteredList);
}
notifyDataSetChanged();
}
您在名爲plistarray
在這裏您清除plistarray
,並再次使用相同的查找記錄filter()
方法單一array
連續運行。所以你適配器,而不是plistarray
public void filter(String text) {
if (text.isEmpty()) {
plistarray.clear();
plistarray.addAll(plistarray);
} else {
ArrayList<ProductList> result = new ArrayList<>();
text = text.toLowerCase();
//after clearing the array again you are using same array to find the items from
for (ProductList item : plistarray) {
if (item.getPtitle().toLowerCase().contains(text)) {
result.add(item);
}
}
//you have cleared all the contains here
plistarray.clear();
// and added only result related items here
plistarray.addAll(result);
}
notifyDataSetChanged();
}
使用[這](https://gist.githubusercontent.com/pskink/cd3bbdd742b5b1905a790c76831b5d85/raw/89a41acded0889028be48e1f669562046cf66126/MatchableRVArrayAdapte%2520(純%2520RecyclerView%,你應該使用一些其他的陣列2520style,%2520no%2520implicit%2520TextView%2520mapping))通用適配器 – pskink