public void setSearch(ArrayList<Search> ListSearch){
search=ListSearch;
removeInActiveClasses(search);
notifyItemRangeChanged(0,search.size());
}
public void removeInActiveClasses(ArrayList<Search> data){
for(int i=0;i<data.size();i++){
boolean isActive=Boolean.parseBoolean(data.get(i).getActive());
System.out.println("The course at Not Removed "+search.get(i).getName()+" is set to "+search.get(i).getActive());
if(!isActive){
System.out.println("The course at Removed"+search.get(i).getName()+" is set to "+search.get(i).getActive());
search.remove(i);
}
}
}
列表作为listSearch传递,它包含一个课程列表,如果课程设置为active是一个字符串,无论是true还是false,并解析为boolean,那么该项应该被删除。我确定我正确解析了所以我想知道这里发生了什么?为什么不删除所有的错误课程?
答案 0 :(得分:2)
您可能想创建另一个ArrayList实例并将search
设置为该实例,因为您正在同时访问和修改ArrayList。
其他说明:
请使用camelCase
作为参数名称。因此,使用searchList
而不是ListSearch。
对于您的类变量,请尝试在前面添加m
,这样您就不会感到困惑。因此,请使用search
mSearchList
最后,您要在一个方法中混合一些变量。尝试统一它们以便更好地进行维护。
这是完整的代码。
public void setSearchList(ArrayList<Search> searchList) {
mSearchList = removeInactiveClasses(searchList);
notifyDataSetChanged();
}
private ArrayList<Search> removeInactiveClasses(ArrayList<Search> data) {
ArrayList<Search> list = new ArrayList<>();
for (int i = 0; i < data.size(); i++){
boolean isActive = Boolean.parseBoolean(data.get(i).getActive());
if (isActive){
list.add(data.get(i));
}
}
return list;
}