Android 调用函数后,我的ArrayList大小变为零(0)。我的错误在哪里?
我正在尝试使用editText筛选recyclerView项。但每当我键入某个内容时,我的arrayList大小就会变为零(0)。我找不到这背后的原因。Android 调用函数后,我的ArrayList大小变为零(0)。我的错误在哪里?,android,android-studio,Android,Android Studio,我正在尝试使用editText筛选recyclerView项。但每当我键入某个内容时,我的arrayList大小就会变为零(0)。我找不到这背后的原因。 常量类中的数组: public static ArrayList<File> searchItem = new ArrayList<>(); public static ArrayList<File> filteredMediaList = new ArrayList<>(); 过滤功能
常量类中的数组:
public static ArrayList<File> searchItem = new ArrayList<>();
public static ArrayList<File> filteredMediaList = new ArrayList<>();
过滤功能:
public void filter(String text){
Log.d("searchQueryText",text);
Constant.filteredMediaList.clear();
Log.d("SearchFilteredMediaList","clear");
if(text.length() == 0){
Constant.filteredMediaList = mediaList;
Log.d("SearchFilteredMediaList","mediaList");
}
else{
for(File file:mediaList){
if(file.getName().toLowerCase().contains(text)){
Constant.filteredMediaList.add(file);
Log.d("SearchFilteredMediaList","adding");
}
}
}
Log.d("SearchAllSize",String.valueOf(Constant.searchItem.size())+" | "+
String.valueOf(Constant.filteredMediaList.size())+" | "+
String.valueOf(mediaList.size()));
//everything becomes zero here
recyclerViewAdapterSearch.notifyDataSetChanged();
}
调用filter函数后,所有arrayList都变为零。有人能帮我找到问题吗。您已经创建了3个列表,我可以看到如下所述:
mediaList = Constant.searchItem;
在这里,分配给searchItem的相同内存由mediaList引用。也就是说,这意味着没有为mediaList创建新内存。因此,对mediaList所做的任何更改也将影响searchItem
之后,在下面提到的代码行中:
Constant.filteredMediaList = mediaList;
filterMediaList指的是mediaList指向的列表
现在,您创建的所有3个列表searchItem、mediaList和filteredMediaList都指向相同的内存。因此,在任何列表中所做的更改都将更改所有3个列表
由于您在filter()方法中提到了以下行:
它会清除所有3个列表,这就是您清除列表的原因
如果您不希望其他列表在对任何其他列表进行更改时生效,以下是执行此操作的方法
我正在为下面的onCreate方法编写代码:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
editTextSearch = findViewById(R.id.editTextSearch);
recyclerViewSearch = findViewById(R.id.recyclerViewSearch);
allPath = new StoragePath(getExternalFilesDirs(null)).getDeviceStorages();
for(String path:allPath){
Log.d("allPath",path);
File directory=new File(path);
Method.load_Directory_Files_Search(directory);
}
mediaList = new ArrayList<>(searchItem);
Constant.filteredMediaList = new ArrayList<>(searchItem);
Log.d("SearchAllSize",String.valueOf(Constant.searchItem.size())+" | "+
String.valueOf(Constant.filteredMediaList.size())+" | "+
String.valueOf(mediaList.size()));
//initializing everything above
recyclerViewSearch.setLayoutManager(new LinearLayoutManager(this,RecyclerView.VERTICAL,false));
recyclerViewAdapterSearch = new RecyclerViewAdapterSearch(this);
recyclerViewSearch.setAdapter(recyclerViewAdapterSearch);
Log.d("SearchAllSize",String.valueOf(Constant.searchItem.size())+" | "+
String.valueOf(Constant.filteredMediaList.size())+" | "+
String.valueOf(mediaList.size()));
//working fine till now
editTextSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String text = editable.toString();
filter(text);
}
});
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u search);
editTextSearch=findViewById(R.id.editTextSearch);
recyclerViewSearch=findViewById(R.id.recyclerViewSearch);
allPath=new-StoragePath(getExternalFilesDirs(null)).getDeviceStorage();
for(字符串路径:allPath){
Log.d(“所有路径”,路径);
文件目录=新文件(路径);
方法。加载\u目录\u文件\u搜索(目录);
}
mediaList=新的ArrayList(searchItem);
Constant.filteredMediaList=newarraylist(searchItem);
Log.d(“SearchAllSize”,String.valueOf(Constant.searchItem.size())+“|”+
String.valueOf(Constant.filteredMediaList.size())+“|”+
String.valueOf(mediaList.size());
//初始化上面的一切
recyclerViewSearch.setLayoutManager(新的LinearLayoutManager(this,RecyclerView.VERTICAL,false));
RecycleServiceAdapterSearch=新的RecycleServiceAdapterSearch(此);
setAdapter(RecycleServiceAdapterSearch);
Log.d(“SearchAllSize”,String.valueOf(Constant.searchItem.size())+“|”+
String.valueOf(Constant.filteredMediaList.size())+“|”+
String.valueOf(mediaList.size());
//工作到现在还不错
editTextSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void PostTextChanged(可编辑){
字符串文本=可编辑的.toString();
过滤器(文本);
}
});
我希望这个解决方案能帮助你
Constant.filteredMediaList = mediaList;
Constant.filteredMediaList.clear();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
editTextSearch = findViewById(R.id.editTextSearch);
recyclerViewSearch = findViewById(R.id.recyclerViewSearch);
allPath = new StoragePath(getExternalFilesDirs(null)).getDeviceStorages();
for(String path:allPath){
Log.d("allPath",path);
File directory=new File(path);
Method.load_Directory_Files_Search(directory);
}
mediaList = new ArrayList<>(searchItem);
Constant.filteredMediaList = new ArrayList<>(searchItem);
Log.d("SearchAllSize",String.valueOf(Constant.searchItem.size())+" | "+
String.valueOf(Constant.filteredMediaList.size())+" | "+
String.valueOf(mediaList.size()));
//initializing everything above
recyclerViewSearch.setLayoutManager(new LinearLayoutManager(this,RecyclerView.VERTICAL,false));
recyclerViewAdapterSearch = new RecyclerViewAdapterSearch(this);
recyclerViewSearch.setAdapter(recyclerViewAdapterSearch);
Log.d("SearchAllSize",String.valueOf(Constant.searchItem.size())+" | "+
String.valueOf(Constant.filteredMediaList.size())+" | "+
String.valueOf(mediaList.size()));
//working fine till now
editTextSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String text = editable.toString();
filter(text);
}
});