java - viewpager2 中的无限滚动
问题描述
我们如何在 ViewPager2 中实现无限滚动
因为OnPageChangeListener()
在这个寻呼机中没有。但是每当我们更改页面时,都会有setPageTransformer()
监听器获取回调。
所以viewpager2问题的任何解决方案
注意:我正在为 viewpager2 使用 recyclerview 适配器
解决方案
对于无限滚动,您不必自定义视图寻呼机。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)
}
}
推荐阅读
- apache-spark - PySpark:结合聚合和窗口函数
- flutter - Flutter:可以将 CupertinoPicker 中的项目定位在两条线之间的中心吗?
- c# - Unity - 使用旧坐标和它们之间的线长获取新坐标
- active-directory - 无 Office 计划且具有 PowerBI 许可证的未许可用户
- python - 进程变成僵尸 - Python3 多处理
- c# - 如何打印不是对象 IEnumerable 的值
()>() - html - 这个在 VueJS 中不起作用的 Click 事件有什么问题吗?
- powerquery - PowerQuery 表转换
- android - 如何在不部署到 GooglePlay 商店的情况下分发我的 Android 应用程序
- ruby - 使用 ruby 和 homebrew 移动手册页