Java 尝试为SearchView复制原始ArrayList时无法复制ArrayList
我正试图为我的应用程序构建一个SearchView,在YouTube上学习“CodingFlow”的教程时,他说要创建一个包含所有项目的原始ArrayList副本。我彻底遵循了教程,用我的应用程序做了类似的事情。但当我写“muploadsearch=newarraylist(uploads)”时,它不会存储任何数据,我的应用程序也不会在SearchView上返回任何数据。如果我写“muploadsearch=uploads”,它确实可以工作并过滤内容,但在第一次搜索中只过滤一次 以下是我的ImageAdapter的代码:Java 尝试为SearchView复制原始ArrayList时无法复制ArrayList,java,android,arraylist,android-recyclerview,searchview,Java,Android,Arraylist,Android Recyclerview,Searchview,我正试图为我的应用程序构建一个SearchView,在YouTube上学习“CodingFlow”的教程时,他说要创建一个包含所有项目的原始ArrayList副本。我彻底遵循了教程,用我的应用程序做了类似的事情。但当我写“muploadsearch=newarraylist(uploads)”时,它不会存储任何数据,我的应用程序也不会在SearchView上返回任何数据。如果我写“muploadsearch=uploads”,它确实可以工作并过滤内容,但在第一次搜索中只过滤一次 以下是我的Ima
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> implements
Filterable {
private Context mContext;
private List<Upload> mUploads;
private List<Upload> mUploadsSearch;
private OnItemClickListener mListener;
public ImageAdapter(Context context, List<Upload> uploads) {
mContext = context;
mUploads = uploads;
mUploadsSearch = new ArrayList<Upload>();
mUploadsSearch.addAll(uploads);
}
@Override
public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.image_item, parent, false);
return new ImageViewHolder(v);
}
@Override
public void onBindViewHolder(ImageViewHolder holder, int position) {
Upload uploadCurrent = mUploads.get(position);
holder.textViewName.setText(uploadCurrent.getName());
Picasso.get()
.load(uploadCurrent.getImageUrl())
.placeholder(R.drawable.ic_food)
.fit()
.centerCrop()
.into(holder.imageView);
}
@Override
public int getItemCount() {
return mUploads.size();
}
@Override
public Filter getFilter() {
return filter;
}
private Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
List<Upload> filteredList = new ArrayList<>();
if (charSequence == null || charSequence.length() == 0) {
filteredList.addAll(mUploadsSearch);
} else {
String filterPattern = charSequence.toString().toLowerCase().trim();
for (Upload item : mUploadsSearch) {
if (item.getName().toLowerCase().contains(filterPattern)) {
filteredList.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredList;
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults results) {
mUploads.clear();
mUploads.addAll((Collection<? extends Upload>) results.values);
notifyDataSetChanged();
}
};
public class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
// View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener
{
public TextView textViewName;
public ImageView imageView;
public ImageViewHolder(View itemView) {
super(itemView);
textViewName = itemView.findViewById(R.id.text_view_name);
imageView = itemView.findViewById(R.id.image_view_upload);
itemView.setOnClickListener(this);
//itemView.setOnCreateContextMenuListener(this);
}
@Override
public void onClick(View v) {
if (mListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
mListener.onItemClick(position);
}
}
}
}
public interface OnItemClickListener {
void onItemClick(int position);
//void onWhatEverClick(int position);
//void onDeleteClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
mListener = listener;
}
公共类ImageAdapter扩展了RecyclerView。适配器实现
可过滤{
私有上下文;
私人列表多路复用器;
私有列表搜索;
私人监听者;
公共ImageAdapter(上下文、列表上载){
mContext=上下文;
mUploads=上传;
muploadsearch=newarraylist();
addAll(上传);
}
@凌驾
public ImageViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutFlater.from(mContext)。充气(R.layout.image_项,父项,false);
返回新的ImageViewHolder(v);
}
@凌驾
BindViewHolder上的公共无效(ImageViewHolder,int位置){
Upload uploadCurrent=mUploads.get(位置);
holder.textViewName.setText(uploadCurrent.getName());
毕加索
.load(uploadCurrent.getImageUrl())
.占位符(R.drawable.ic_食品)
.fit()
.centerCrop()
.插入(支架.图像视图);
}
@凌驾
public int getItemCount(){
返回mUploads.size();
}
@凌驾
公共过滤器getFilter(){
回流过滤器;
}
专用筛选器筛选器=新筛选器(){
@凌驾
受保护过滤器结果执行过滤(CharSequence CharSequence){
List filteredList=新建ArrayList();
if(charSequence==null | | charSequence.length()==0){
filteredList.addAll(muploadsearch);
}否则{
String filterPattern=charSequence.toString().toLowerCase().trim();
用于(上载项目:muploadsearch){
if(item.getName().toLowerCase().contains(filterPattern)){
filteredList.add(项目);
}
}
}
FilterResults results=新的FilterResults();
results.values=filteredList;
返回结果;
}
@凌驾
受保护的无效发布结果(CharSequence CharSequence、FilterResults results){
mUploads.clear();
mUploads.addAll((CollectionHello Paul使用这个:this.muploadsearch=new ArrayList();@DaltonDias嘿,道尔顿,谢谢你的评论和帮助,但我不太明白将原始ArrayList的数据复制到Muploadsearch会有什么影响。