ViewPager2

(如果每一页的 Fragment 比较复杂可以使用 ViewPager2)
(使用ViewPager2可以在一个Fragment中包含多个子Fragment,并且支持滑动切换页面。每个页面通常对应一个Fragment,这样可以实现在同一个界面中展示多个页面内容的效果)
(实现滑动页面的组件)

ViewPager2 是 AndroidX 库中的一个控件,用于实现水平或垂直滑动的页面切换效果。(ViewPager2 是一个 ViewGroup 即是一个容器)

适配器模式
ViewPager2 是一个皮囊 -> 怎么显示靠 Adapter(具体的内容给到具体的 Adapter)

适配器负责提供页面内容以供 ViewPager2 显示
ViewPager2 实际上是通过适配器来获取每个页面的视图并显示在用户界面上。
适配器负责将数据与界面绑定,以便 ViewPager2 可以正确地显示页面内容。

使用步骤

ViewPager2基本用法(步骤)

  1. 在 activity_main.xml 中添加 ViewPager2 控件

  2. 创建和设置适配器(Adapter)来管理 ViewPager2 的内容
    创建一个类继承于 FragmentStateAdapter 必须有生命周期和 fragmentManager

需要重写两个方法:
getItemCount(): Int { } //确定多少页
createFragment(position: Int): Fragment {} //每一页需要显示什么fragment
最好用数组保存fragment,作为参数由外部传给Adapter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyAdapter(
val fragmentList:List<Fragment>,
fm:FragmentManager,
lifecycle:Lifecycle):FragmentStateAdapter(fm,lifecycle) {

override fun getItemCount(): Int {
//多少页
return fragmentList.size
}

override fun createFragment(position: Int): Fragment {
//每一页需要显示什么fragment
return fragmentList[position]
}
}
  1. 创建 对应页数的 fragment
  2. 在 MainActivity onCreat中配置 adapter
    在 Fragment 中的onViewCreated中配置 ViewPager 的 adapter (parentFragmentManager)
1
2
3
4
5
val vp2 = findViewByld<ViewPager2>(R.id.viewPager2)
vp2.adapter = MyAdapter(
listOf(FistFragment(),SecondFragment()),
supportFragmentManager,
lifecycle)

常用方法

ViewPager2是Android中用于实现滑动页面的组件,以下是一些常用方法的示例(使用Kotlin语言):

  1. 设置适配器(Adapter):

    1
    2
    3
    val viewPager2: ViewPager2 = findViewById(R.id.viewPager2)
    val adapter = MyAdapter()
    viewPager2.adapter = adapter
  2. 设置页面切换监听器(Page Change Listener)(registerOnPageChangeCallback):

    1
    2
    3
    4
    5
    viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
    override fun onPageSelected(position: Int) {
    // 在这里处理页面切换时的逻辑
    }
    })
  3. 设置当前页面(currentItem):

    • 当前页面:
      1
      viewPager2.currentItem = 2  // 将当前页面设置为第3页(从0开始计数)
    • 滚动到下一页:
      1
      viewPager2.currentItem += 1
    • 滚动到上一页:
      1
      viewPager2.currentItem -= 1
    • 获取当前页面的索引:
      1
      val currentIndex = viewPager2.currentItem
  4. 设置页面间的边距(Page Margin):

    1
    2
    3
    val pageMarginPx = resources.getDimensionPixelOffset(R.dimen.pageMargin)
    val offsetPx = resources.getDimensionPixelOffset(R.dimen.offset)
    viewPager2.setPageTransformer(MarginPageTransformer(pageMarginPx))
  5. 禁止用户滑动(isUserInputEnabled):

    1
    viewPager2.isUserInputEnabled = false
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2023-2025 Annie
  • Visitors: | Views:

嘿嘿 请我吃小蛋糕吧~

支付宝
微信