我对跟踪某人的费用的应用程序工作问题,用户将他们所购买的,它跟踪的是,费用显示在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