Обработчик не работает внутри View Holder в Android - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь создать RecyclerView с автоматическим слайдером изображений с ViewPager внутри ViewHolder класса.Проблема в том, что обработчик выполнен, но onPageChangeListener не работает.Давайте назовем это adView

public class BannerViewHolder extends BaseViewHolder<BannerResponse> {

@BindView(R.id.adViewPager)
ViewPager adViewPager;
@BindView(R.id.dotIndicator)
PageIndicatorView indicator;
private ImageViewPagerAdapter mImagePagerAdapter;
private Handler handler = new Handler();
private int bannerImageSize = 0;
private int currentPage = 0;

private final Runnable sliderPage = () -> {
    currentPage++;
    if (currentPage == bannerImageSize - 1) {
        currentPage = 0;
    }
};

public BannerViewHolder(View itemView) {
    super(itemView);
    ButterKnife.bind(this, itemView);
    mImagePagerAdapter = new ImageViewPagerAdapter(itemView.getContext());
}


@Override
public void setData(BannerResponse mData) {
    if (mData != null && mData.getBannerList() != null && !mData.getBannerList().isEmpty()) {
        mImagePagerAdapter.setData(mData.getBannerList());
        adViewPager.setAdapter(mImagePagerAdapter);
        bannerImageSize = mData.getBannerList().size();
        indicator.setViewPager(adViewPager);
        handler.postDelayed(sliderPage, 1000);
        adViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                indicator.setSelection(position);
                currentPage = position;
                handler.removeCallbacks(sliderPage);
                handler.postDelayed(sliderPage, 2000);

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
}}    

Когда этот adView выполняется за пределами RecyclerView, а не как часть cardItem внутри RecyclerView,это работало.Но это не работает, когда оно реализовано внутри ViewHolder из RecyclerView.View раздулся, ползунок не работает.

EDITED - И я также хочу знать эффекты объявления Handler и Runnable in ViewHolder .Может ли это привести к утечке памяти?Если так, как я могу избежать этого?

1 Ответ

1 голос
/ 12 июня 2019
private final Runnable sliderPage = () -> {
  currentPage++;
  if (currentPage == bannerImageSize - 1) {
    currentPage = 0;
  }
  viewPager.setCurrentItem(currentPage);
};
...