防止在过滤适配器数据[Android]上重新加载图像

问题描述 投票:1回答:1

我正在从片段搜索视图调用过滤器数据功能,它工作正常,并且正在对数据进行过滤,但是正在重新加载图像。如何防止这种情况

public menuadapter(ArrayList<GridItem> mGridDat, Context context, OnItemClickListener listener) {
    this.mGridData=new ArrayList<GridItem>();
    this.orignallist=new ArrayList<GridItem>();
    mGridData.addAll(mGridDat);
    orignallist.addAll(mGridDat);
    this.context = context;
    this.listener = listener;
    this.Session=new session(context);
}

public void onBindViewHolder(final MyViewHolder holder, final int position) {
        final Activity activity = (Activity)context;


    String capital=mGridData.get(position).getTitle().substring(0,1).toUpperCase()+mGridData.get(position).getTitle().substring(1).toLowerCase();
        holder.txtview.setText(capital);

        Picasso.with(context).load(mGridData.get(position).getImage()).fit().centerCrop().skipMemoryCache().into(holder.imageView);
    }

过滤数据功能

    public void filterData(String query){
            query=query.toLowerCase();
            //Log.v("check1",String.valueOf(orignallist.size()));
            mGridData.clear();
            if(query.isEmpty()){
                mGridData.addAll(orignallist);
                // Log.v("check2",String.valueOf(orignallist.size()));
            }
        else {
            //Log.v("check0",String.valueOf(orignallist.size()));
            ArrayList<GridItem> newlist = new ArrayList<>();
            for(GridItem gd: orignallist) {

                if ((gd.getTitle().toLowerCase().contains(query))  ) {
                    newlist.add(gd);
                }
            }

            if(newlist.size()> 0){

                mGridData.addAll(newlist);
            }

        }

        notifyDataSetChanged();
    }
java android android-recyclerview android-adapter recycler-adapter
1个回答
0
投票
为了避免图像脱落,我想到的解决方法是

  1. 一个是删除与查询不匹配的图像,并保留其他图像。像-

    if(!(gd.getTitle().toLowerCase().contains(query))) { // get it from holder.getAdapterPosition(); contentsArrayList.remove(position); notifyItemRemoved(position); } // out of for loop notifyItemRangeChanged(firstRemovedPostion,contentsArrayList.size());

  2. 您可以隐藏不匹配查询的元素,然后显示它是否匹配另一个

itemView.setVisibility(View.GONE);

© www.soinside.com 2019 - 2024. All rights reserved.