我對跟蹤某人的費用的應用程序工作問題,用戶將他們所購買的,它跟蹤的是,費用顯示在recyclerview,有來的時候,一個有太多的項目,因此需要搜索,因此我添加了一個正在查找的搜索功能,但是由於我正在處理費用,因此適配器有一個複選框,用於指示是否已經支付費用,當我搜索項目並勾選它已經支付的功能工作正常,但只要我退出搜索模式,我注意到的東西,在項目開始回到原來的位置,在列表中,但佔據該位置的項目之前修改的項目也繼承了支付狀態,它被勾選爲支付,希望我的解釋是有道理的,這裏有一些屏幕截圖來演示我的意思:與Android搜索查看在回收站
在第一個屏幕截圖我們有一個正常的列表,但我將尋找Dgdf
目前Dgdf
在位置1
搜索Dgdf
後所花費的數組中的位置0
因爲我有我一直在尋找的項目爲在這種情況下是Dgdf
我決定將其標記爲付費的我做
但在這裏,只要我存在編輯模式的項目是需要位置0
也被選中作爲支付
下面是我的代碼,我使用了搜索:
protected FilterResults performFiltering(CharSequence constraint) {
final FilterResults oReturn = new FilterResults();
final ArrayList<Expense> results = new ArrayList<>();
//I thought loading new data from database each time would
// help but did not help at all
filterSearch = database.getAllExpenses();
if (constraint != null) {
if (filterSearch != null & filterSearch.size() > 0)
{
for (Expense g : filterSearch)
if (g.getMerchantName().toLowerCase().contains(constraint.toString().toLowerCase()))
results.add(g);
oReturn.values = results;
}
}
return oReturn;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
//update adapter arraylist
adapterExpenseList = (ArrayList<Expense>) results.values;
notifyDataSetChanged();
}
顯然,你不應該使用的位置,但有些ID ......這樣的錯誤是不過濾,但在存儲項目......簡單的方法將是商店的選中狀態,如果產品支票'Expense'模型本身 - 或者在某些SpraseArray – Selvin
Selvin是的,你是正確的,將它們存儲在該模型將工作,這就是我做的,顯然它不工作,我試着打無效的回收和我注意到了所有項目的檢查,問題IDS在我調用'notifydatasetchanged()'時進來 – Chrometobia