首页 > 解决方案 > viewpager2 中的无限滚动

问题描述

我们如何在 ViewPager2 中实现无限滚动

因为OnPageChangeListener()在这个寻呼机中没有。但是每当我们更改页面时,都会有setPageTransformer()监听器获取回调。

所以viewpager2问题的任何解决方案

注意:我正在为 viewpager2 使用 recyclerview 适配器

标签: javaandroidandroid-viewpager2

解决方案


对于无限滚动,您不必自定义视图寻呼机。viewPager 适配器中的技巧。您可以在 getCount 覆盖方法中返回 Int.MAX 值。在 instanceiteItem 覆盖函数中,您可以使用item_position % item_size来获取实际的项目位置。代码示例如下。

class AdsSliderAdapter(
private val bannerImageList: MutableList<SliderImagesItem>,
private val callback: SliderItemClickListener) :PagerAdapter() {

private var mContext: Context? = null
override fun instantiateItem(container: ViewGroup, position: Int): Any {
    mContext = container.context

    val view = LayoutInflater.from(container.context)
        .inflate(R.layout.item_ad_slider, container, false)

    val adImage: AppCompatImageView = view.ivAd
    mContext?.let {
        GlideApp.with(it).load(bannerImageList[position % bannerImageList.size].imageUrl)
            .into(adImage)
    }
    val viewPager = container as ViewPager
    viewPager.addView(view, 0)

    view.cardView.onClick { callback.onSliderImageClick(bannerImageList[position % bannerImageList.size]) }
    return view
}

override fun isViewFromObject(view: View, `object`: Any): Boolean {
    return view === `object`
}

override fun getCount(): Int {
    return if (bannerImageList.size > 0) {
        Int.MAX_VALUE
    } else {
        0
    }
}

override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
    val viewPager = container as ViewPager
    val view = `object` as View
    viewPager.removeView(view)
}

interface SliderItemClickListener {
    fun onSliderImageClick(item: SliderImagesItem)
}

}


推荐阅读