Предотвращение перезагрузки изображения при фильтрации данных адаптера [Android] - PullRequest
1 голос
/ 22 февраля 2020

Я вызываю функцию фильтрации данных из представления поиска фрагментов, она работает нормально и данные фильтруются, но изображения перезагружаются. Как это можно предотвратить

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();
    }

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

Попробуйте это

    Picasso.with(context).load(mGridData.get(position).getImage()).fit().centerCrop().networkPolicy(NetworkPolicy.OFFLINE).into(holder.imageView);

Вам необходимо использовать свойство ниже и не skipMemoryCache()

OFFLINE

publi c stati c final NetworkPolicy OFFLINE

Принудительно запрашивает только через дисковый кеш, пропуская сеть.

https://square.github.io/picasso/2.x/picasso/com/squareup/picasso/NetworkPolicy.html

0 голосов
/ 22 февраля 2020

Чтобы избежать повторной загрузки изображений, я думаю о следующих решениях:

  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);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...