Я пытаюсь создать 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 .Может ли это привести к утечке памяти?Если так, как я могу избежать этого?