从回收者视图列表中选择多个项目删除不正常工作


if (RFidList.size() >0){
for (String s: RFidList){
RFidTagValueList.remove(s);
}
}
mTimeAdapter.notifyDataSetChanged();
dialog.dismiss();

当在recyclerview复选框中选择多个项目不工作时/我使用private ArrayList<String> data = new ArrayList<>();

不能从列表中移动和删除。这样做的最佳选择是使用一个数组来记住复选框的状态。滚动你的回收站视图总是会改变复选框的状态,也许不会记住它。方法是添加一个布尔值

数组
private boolean[] checkStates;

然后在适配器的构造函数中执行此操作。

checkStates = new boolean[data.size()];

这样您将创建一个布尔数组,其中填充与您的数据数组大小相同的FALSE值。现在,在你的适配器中,当你绑定视图的时候,对复选框做这个操作。

holder.checkbox.setChecked(checkStates[position]);

另外,不要在适配器内的复选框上使用onCheckedChangeListener。这将被调用,甚至当你滚动,它会改变你在函数内做的任何事情。你能做的是覆盖复选框的onClick,但这里有一些棘手的事情。当你点击复选框来勾选它时,在onClick方法中,视图的状态会显示为已经勾选了所以要遵循这个操作,像这样做:

holder.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Checkbox c = (CheckBox) v;
checkStates[position] = c.isChecked();
}
});

这是我的头脑写的,也许有一些错误,但你会明白的。检查状态的动画将被处理,您只需要处理checkStates数组内的更改。

现在你的复选框将始终保持它之前的状态。在此之后,您可以创建一个函数来从数据中删除项。

public void removeItems() {
ArrayList<YOUR-MODEL> items_to_delete = new ArrayList<>();
for (int i = 0; i < checkStates.length(); ++i) {
if (checkStates[i]) items_to_delete.add(data.get(i]);
}

data.removeAll(items_to_delete);
notifyDataSetChanged();
checkStates = new boolean[data.size()];
}

如果你的数据是数组列表的类型,这个方法可以工作。我认为这是最好的办法。

相关内容

  • 没有找到相关文章