我正在尝试在 ViewHolder 类中使用带有 ViewPager 的自动图像滑块制作RecyclerView
。
问题是执行了处理程序,但是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
之外而不是RecyclerView
内cardItem的一部分中完成时,它正在工作。但是,当它在ViewHolder
的{{1}}中实现时,此方法不起作用。
RecyclerView
膨胀了,滑块不起作用。
已编辑 - 我还想知道在 ViewHolder 中声明 Handler 和 Runnable 的效果。它会导致内存泄漏吗?如果是这样,我该如何避免呢?
答案 0 :(得分:1)
private final Runnable sliderPage = () -> {
currentPage++;
if (currentPage == bannerImageSize - 1) {
currentPage = 0;
}
viewPager.setCurrentItem(currentPage);
};