Recycler 中的 SearchVIew 问题 Android
Issues with SearchVIew in Recycler 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();
}
我终于找到了问题,显然搜索算法一切正常,问题是负责勾选复选框的代码,我只检查了一侧,即
if (expense.getIsChecked() == 1)
holder.checkBox.setChecked(true);
else
holder.checkBox.setChecked(false)
但在我执行此检查时,复选框已设置为 true,因此无法取消选中它,所以我只是这样做了
if (expense.getIsChecked() == 1)
holder.checkBox.setChecked(true);
if (expense.getIsChecked() == 0)
holder.checkBox.setChecked(false);
我必须检查这两种情况,无论是真还是假,现在它工作得很好。
我正在开发一个跟踪某人开支的应用程序,用户添加他们购买的东西并跟踪它,开支显示在回收站视图中,有时会有太多项目并需要搜索因此我添加了一个搜索功能,它只是在查找中工作,但是因为我正在处理费用,所以当我搜索项目并勾选它时,适配器有一个复选框指示是否已支付费用已经为该功能付费工作正常但是一旦我退出搜索模式我注意到一些东西,该项目返回到其在列表中的原始位置但是占据先前修改的项目位置的项目也继承了付费状态,它是也勾选为付费,希望我的解释是有道理的,这里有一些屏幕截图可以证明我的意思:
在第一个屏幕截图中我们有一个正常列表,但我将搜索 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();
}
我终于找到了问题,显然搜索算法一切正常,问题是负责勾选复选框的代码,我只检查了一侧,即
if (expense.getIsChecked() == 1)
holder.checkBox.setChecked(true);
else
holder.checkBox.setChecked(false)
但在我执行此检查时,复选框已设置为 true,因此无法取消选中它,所以我只是这样做了
if (expense.getIsChecked() == 1)
holder.checkBox.setChecked(true);
if (expense.getIsChecked() == 0)
holder.checkBox.setChecked(false);
我必须检查这两种情况,无论是真还是假,现在它工作得很好。