栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android ViewPager和ViewPager2

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android ViewPager和ViewPager2

文章目录
  • 前言
  • 一、使用Viewpager
    • 1.渲染页面
    • 2.渲染Fragment
    • 常用方法(API)
  • 二、ViewPager2
    • 1.渲染页面
    • 2.渲染Fragment
    • 常用方法(API)
  • 总结


前言

ViewPager和ViewPager2进行对比,前者性能稍微差点,使用的是PagerAdpater适配器,
后者使用的是RecyclerView.Adapter适配器,功能更多。


一、使用Viewpager 1.渲染页面
class PagerAdapter(private val list: List) : 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
    }
}
2.渲染Fragment
class PagerAdapterFragment(activity: AppCompatActivity, private val list: List):FragmentPagerAdapter(activity.supportFragmentManager){
    // 渲染总数量
    override fun getCount(): Int = list.size
    // 绑定fragment
    override fun getItem(position: Int): Fragment = list[position]
}
常用方法(API)

切换事件监听

	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.渲染Fragment
class Pager2AdapterFragment(private val list: List, activity: FragmentActivity) :
    FragmentStateAdapter(activity) {
    // 页数
    override fun getItemCount(): Int = list.size
    // 绑定fragment
    override fun createFragment(position: Int): Fragment = list[position]
}
常用方法(API)

滑动事件监听

	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)
            }
      })

总结

两种功能都非常类似,后者性能更优,支持的更好,实现也很简单,前者相比较稍微麻烦。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号