Bootstrap

ViewPager2的介绍,以及它的使用示例

ViewPager2 是 Android 官方提供的一个用于实现页面滚动视图的库。它是 ViewPager 的增强版,基于 RecyclerView 实现,提供了更多的功能和更好的。ViewPager2 能够更有效地处理页面切换,并且支持垂直方向的滑动。可以实现页面滚动视图,常用于展示图片画廊、应用主界面标签页等场景。由于基于 RecyclerView,可以充分利用 RecyclerView 的各种配置功能,如 ItemDecoration、LayoutManager 等。

ViewPager2 的优点

性能优化ViewPager2 因为基于 RecyclerView,所以在性能上有所优化,尤其是在处理大量数据或者复杂的页面切换动画时。

更好的可扩展性ViewPager2 使用 RecyclerView 的设计,使得扩展性更强,可以充分利用 RecyclerView 的各种配置功能,如 ItemDecorationLayoutManager 等。

支持差分更新(DiffUtil)ViewPager2 支持差分更新,可以高效地更新数据,当数据发生变化时,只需要更新变化的部分,而不是重新加载整个列表。

支持页面转换效果(PageTransformer)ViewPager2 提供了 PageTransformer 接口,允许开发者自定义页面转换效果,比如缩放、滑动时的淡入淡出等。

更流畅的滑动体验ViewPager2 的滑动体验更加流畅,它提供了更多的控制滑动手势的方法,如 setUserInputEnabled 和 setIsNestedScrollingEnabled

与 TabLayout 更好的集成ViewPager2 使用 TabLayoutMediator 与 TabLayout 集成,提供了更多的灵活性,并且可以更容易地标签页的动态添加和移除。

生命周期管理ViewPager2 默认支持懒加载,并且通过 Lifecycle 对 Fragment 的生命周期进行管理,这有助于提高应用的性能。

易于使用和集成ViewPager2 的 API 设计简单直观,易于理解和使用,可以轻松集成到现有的项目中。

总的来说,ViewPager2 在性能、可扩展性、用户体验和集成方面都有显著的改进,是 Android 开发者在实现页面滚动视图时的一个很好的选择。

ViewPager2 与 ViewPager 的区别

内部实现ViewPager2 使用 RecyclerView,而 ViewPager 使用自己的滑动机制。

性能ViewPager2 因为基于 RecyclerView,性能更优。

方向ViewPager2 支持竖直方向的滑动,而 ViewPager 仅支持水平方向。

AdapterViewPager2 使用单一的Adapter,且继承自 RecyclerView.Adapter,而 ViewPager使用两种 AdapterFragmentStatePagerAdapter 和 FragmentPagerAdapter)。

生命周期管理ViewPager2 默认支持懒加载,并且通过 Lifecycle 对 Fragment 的生命周期进行管理。而 ViewPager 需要手动实现懒加载,并且预加载机制默认开启。

TabLayout 集成ViewPager 与 TabLayout 的集成通过 setupWithViewPager() 方法,而 ViewPager2 使用 TabLayoutMediator

使用示例:
添加依赖

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.0.0"
}

布局

<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/viewPager
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.viewpager2.widget.ViewPager2
import androidx.lifecycle.Lifecycle
import androidx.viewpager2.adapter.FragmentStateAdapter

class MainActivity : AppCompatActivity() {

    private lateinit var viewPager2: ViewPager2

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewPager2 = findViewById(R.id.viewPager)

        // 创建一个 FragmentStateAdapter
        val adapter = MyFragmentStateAdapter(lifecycle)

        // 设置 ViewPager2 的 adapter
        viewPager2.adapter = adapter
    }
}

// 自定义 FragmentStateAdapter
class MyFragmentStateAdapter(private val lifecycle: Lifecycle) : FragmentStateAdapter(lifecycle) {
    private val pageTitles = listOf("Page 1", "Page 2", "Page 3")

    override fun getItemCount() = pageTitles.size

    override fun createFragment(position: Int): Fragment {
        return TextFragment().apply {
            arguments = Bundle().apply {
                putString("title", pageTitles[position])
            }
        }
    }
}

// 自定义 Fragment
class TextFragment : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.fragment_text, container, false)
        val title = arguments?.getString("title")
        title?.let {
            view.findViewById<TextView>(R.id.textView).text = it
        }
        return view
    }
}

在这个示例中,创建了一个 MyFragmentStateAdapter 类,它继承自 FragmentStateAdapter。这个 adapter 管理一个简单的 Fragment 列表,每个 Fragment 显示一个文本。使用 Lifecycle 来确保 adapter 与 Activity 的生命周期同步。

TextFragment 是另一个自定义的 Fragment,它展示了一个文本视图。在 onCreateView 方法中,从 arguments 中获取标题并设置到文本视图上。

最后在 Activity 的 onCreate 方法中设置了 ViewPager2 的 adapter,并将 ViewPager2 与布局中的 ID 关联。


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/m0_46368082/article/details/136383145

;