- 前言
- 一、使用Viewpager
- 1.渲染页面
- 2.渲染Fragment
- 常用方法(API)
- 二、ViewPager2
- 1.渲染页面
- 2.渲染Fragment
- 常用方法(API)
- 总结
前言
ViewPager和ViewPager2进行对比,前者性能稍微差点,使用的是PagerAdpater适配器,
后者使用的是RecyclerView.Adapter适配器,功能更多。
一、使用Viewpager 1.渲染页面
class PagerAdapter(private val list: List2.渲染Fragment) : PagerAdapter() { // 渲染总数量 override fun getCount(): Int = list.size // 检查是否相等 override fun isViewFromObject(view: View, `object`: Any): Boolean { return view == `object` } // 在销毁时一起销毁View override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { container.removeView(`object` as View) } // 绑定视图 override fun instantiateItem(container: ViewGroup, position: Int): Any { val view = LayoutInflater.from(container.context) .inflate(android.R.layout.simple_list_item_1, container, false) view as TextView view.text = list[position].toString() container.addView(view) return view } }
class PagerAdapterFragment(activity: AppCompatActivity, private val list: List常用方法(API)):FragmentPagerAdapter(activity.supportFragmentManager){ // 渲染总数量 override fun getCount(): Int = list.size // 绑定fragment override fun getItem(position: Int): Fragment = list[position] }
切换事件监听
binding.pager.addOnPageChangeListener(object:ViewPager.OnPageChangeListener{
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
// 进行切换的过程中
}
override fun onPageSelected(position: Int) {
// 已经切换过来
}
override fun onPageScrollStateChanged(state: Int) {
// 用户对当前Page进行的状态
}
})
二、ViewPager2
1.渲染页面
class Pager2Adapter(private val list: List) : RecyclerView.Adapter () { inner class BaseHolder(view: View) : RecyclerView.ViewHolder(view) // 创建并绑定视图 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseHolder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.pager2_item_view, parent, false) return BaseHolder(view) } // 绑定数据 override fun onBindViewHolder(holder: BaseHolder, position: Int) { val text = holder.itemView as TextView text.text = list[position].toString() } // 设置页数 override fun getItemCount(): Int = list.size }
注意,视图必须填满整个ViewPager
2.渲染Fragmentclass Pager2AdapterFragment(private val list: List常用方法(API), activity: FragmentActivity) : FragmentStateAdapter(activity) { // 页数 override fun getItemCount(): Int = list.size // 绑定fragment override fun createFragment(position: Int): Fragment = list[position] }
滑动事件监听
binding.pager2.registerOnPageChangeCallback(object:ViewPager2.OnPageChangeCallback(){
// 在移动中
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)
}
// 切换完成
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
}
// 监听当前Page状态
override fun onPageScrollStateChanged(state: Int) {
super.onPageScrollStateChanged(state)
}
})
总结
两种功能都非常类似,后者性能更优,支持的更好,实现也很简单,前者相比较稍微麻烦。



