Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在搜索期间过滤列表会修改原始数据源_Java_Android_Arraylist_Android Recyclerview_Searchview - Fatal编程技术网

Java 在搜索期间过滤列表会修改原始数据源

Java 在搜索期间过滤列表会修改原始数据源,java,android,arraylist,android-recyclerview,searchview,Java,Android,Arraylist,Android Recyclerview,Searchview,我刚刚在我的视图中添加了一个SearchView,其中包含一个RecyclerView。它工作得很好,但每次我设置过滤器时,它都会根据前一个过滤器进行过滤。此外,当我关闭搜索字段时,完整的数据列表不会重新出现 这是我在适配器中的配置(我没有列出onBindViewHolder或onCreateViewHolder,但它们都在那里): 这就是DataManager类中的内容: static ArrayList<Attraction> attractionArrayList = new

我刚刚在我的视图中添加了一个
SearchView
,其中包含一个
RecyclerView
。它工作得很好,但每次我设置过滤器时,它都会根据前一个过滤器进行过滤。此外,当我关闭搜索字段时,完整的数据列表不会重新出现

这是我在适配器中的配置(我没有列出
onBindViewHolder
onCreateViewHolder
,但它们都在那里):

这就是
DataManager
类中的内容:

static ArrayList<Attraction> attractionArrayList = new ArrayList<Attraction>();
static ArrayList attractionArrayList=new ArrayList();
我还有一个函数,在从数据库加载所有吸引人的内容后,我将它们添加到
attractionArrayList

问题似乎出在方法
setFilter
上,因为我发现它正在修改
DataManager.attractionsArrayList

有人知道它为什么这样做,以及我如何保持完整列表的完整性,同时过滤该列表的副本(就像我尝试过的那样)?

您正在这样做:

public void setFilter(List<Attraction> attractions) {
    attractionsList.clear();
    attractionsList.addAll(attractions);
}
public void setFilter(List

您正在执行以下操作:

public void setFilter(List<Attraction> attractions) {
    attractionsList.clear();
    attractionsList.addAll(attractions);
}

publicsvoidsetfilter(List

即使在
RecyclerView
活动中创建另一个
ArrayList
也不能解决这个问题。我仍然不太明白为什么要更改
DataManger
中的列表。我以为Java中的参数总是按值传递的?即使在
RecyclerView
活动中创建另一个
ArrayList
Victity并不能解决这个问题。我仍然不太明白为什么要更改
DataManger
中的列表。我以为在Java中参数总是按值传递的?
public void setFilter(List<Attraction> attractions) {
    attractionsList.clear();
    attractionsList.addAll(attractions);
}