Android Recyclerview перестает загружать уже загруженные элементы - PullRequest
1 голос
/ 07 мая 2019

В моем RecyclcerView, когда я прокручиваю вниз и снова прокручиваю вверх, я хочу прекратить привязывать верхние элементы.

Я пробовал этот код

recyclerView.getRecycledViewPool().setMaxRecycledViews(ItemTypeHead1, 0);

, но позиция 0получает повторнопричина, по которой я хочу это сделать, заключается в том, что рендеринг каждого элемента очень тяжелый, что приводит к задержке при прокрутке.это мой адаптер

public class HomeSliderListAdapter extends AdvanceRecycleViewAdapter<HomeSliderListAdapter.Holder, Banner> implements OnRecycleItemClick<Banner> {

public interface CallBack {
    void onClick(Banner Banner);
}

private Context context;
private CallBack callBack;

public HomeSliderListAdapter(Context context, CallBack callBack) {
    this.context = context;
    this.callBack = callBack;
}

@Override
public Holder createDataHolder(ViewGroup parent, int viewType) {
    return new Holder(makeView(parent, R.layout.row_home_one_banner));
}

@Override
public void onBindDataHolder(Holder holder, int position) {
    Banner banner = getItems().get(position);

    EpizodUtil.getPicasso(context)
            .load(EpizodUtil.getConvertedImagePath(banner.getImagePath() + "", Common.ImageSize.s10))
            .networkPolicy(NetworkPolicy.NO_CACHE)
            .into(holder.img_background);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (callBack != null) {
                callBack.onClick(banner);
            }
        }
    });

    holder.txt_title.setText(EpizodUtil.checkNullString(banner.getTitleFa()));
    holder.txt_subtitle.setText(EpizodUtil.checkNullString(banner.getSubtitleFa()));
}

1 Ответ

2 голосов
/ 07 мая 2019

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

В любом случае, представление переработчика вызовет onBindViewHolder, и именно в этой функции вы должны настроить свой элемент.

Что вы можете сделать, это определить, загружен ли текущий элемент(задается onBindViewHolder) идет снизу или сверху.

Вот идея того, что я имею в виду:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder>
{
    private int mLowestPosition = -1;

    ...

    public CustomAdapter(...)
    {
         ...
    }

    @Override
    public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
         ...
    }


    @Override
    public void onBindViewHolder(ViewHolder iHolder, int iPosition)
    {

        if (iPosition > mLowestPosition)
        {
             // All item coming from the bottom for their first time will pass here.
             // Bind your view here

             mLowestPosition = iPosition;
        }
    }

}

Если вы хотите повторно использовать данные, исчезающие снизу при прокрутке вверх, вы можете получить их, переопределив onViewRecycled

Источники:

https://stackoverflow.com/a/26748274/5384689

RecyclerView.Adapter.onViewRecycled ()

...