美文网首页
Android-ViewPager2的使用

Android-ViewPager2的使用

作者: zzq_nene | 来源:发表于2020-11-13 10:15 被阅读0次

一、ViewPager2的变化

ViewPager2是用来替换ViewPager的,ViewPager2是final修饰的,直接继承ViewGroup,其内部是使用RecyclerView,ViewPager2默认是使用懒加载。
ViewPager2与ViewPager的改进:
(1)支持Right to Left布局,即从右向左布局
(2)支持竖向滚动
(3)支持notifyDataSetChanged
(4)支持懒加载
而api上的变动如下:
(1)FragmentStateAdapter替换了原来的 FragmentStatePagerAdapter
(2)RecyclerView.Adapter替换了原来的 PagerAdapter
(3)registerOnPageChangeCallback替换了原来的 addPageChangeListener

二、ViewPager2的使用

1.单纯使用ViewPager2

projectViewPager.adapter = object: FragmentStateAdapter(this) {
    override fun getItemCount(): Int = mProjectTypeList.size

    override fun createFragment(position: Int): Fragment = chooseFragment(position)

}

ViewPager2使用的Adapter是FragmentStateAdapter和RecyclerView.Adapter。如果是需要展示Fragment,则使用FragmentStateAdapter;如果是需要展示View,则使用RecyclerView.Adapter

2.ViewPager2+TabLayout联动

viewPager.adapter = object: FragmentStateAdapter(this){
    override fun getItemCount(): Int = systemBean.children.size

    override fun createFragment(position: Int): Fragment = SystemTypeFragment.newInstance(systemBean.children[position].id, false)

}
// 联动ViewPager2和TabLayout
TabLayoutMediator(tabLayout, viewPager){
    tab, position -> tab.text = systemBean.children[position].name
}.attach()

ViewPager2的联动需要配合TabLayoutMediator使用。
在TabLayoutMediator的构造器中,第三个参数是TabConfigurationStrategy接口实现对象,接口如下:

public interface TabConfigurationStrategy {
  /**
   * Called to configure the tab for the page at the specified position. Typically calls {@link
   * TabLayout.Tab#setText(CharSequence)}, but any form of styling can be applied.
   *
   * @param tab The Tab which should be configured to represent the title of the item at the given
   *     position in the data set.
   * @param position The position of the item within the adapter's data set.
   */
  void onConfigureTab(@NonNull TabLayout.Tab tab, int position);
}

第一个参数就是TabLayout当前的Tab,而position就是当前Tab的索引。这个方法是将ViewPager2与TabLayout绑定之后遍历调用的。
通过这个Tab对象,可以对每一个Tab做自定义,比如自定义Tab的文本显示内容,或者Tab的显示样式。
上面的例子中就是自定义每个Tab的文本内容。

TabLayoutMediator(tabLayout, viewPager) { tab, position ->
    tab.customView = mTabs[position]
    // tab.text = mTitles[position]
}.attach()

这个就在自定义Tab的显示View的。
这里的mTabs是一个自定义View的列表

3.ViewPager2与BottomNavigationView联动

这个做法其实就是给BottomNavigationView添加setOnNavigationItemSelectedListener监听,然后根据选择的position切换ViewPager2

    private val navigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener {
        when(it.itemId) {
            R.id.home -> {
                switchFragment(0)
            }
            R.id.blog -> {
                switchFragment(1)
            }
//            R.id.search -> {
//                switchFragment(2)
//            }
            R.id.project -> {
                switchFragment(2)
            }
            R.id.personal -> {
                switchFragment(3)
            }
        }
        true
    }
main_nav_view.setOnNavigationItemSelectedListener(navigationItemSelectedListener)
private fun switchFragment(position: Int): Boolean {
    // 设置为false,就是取消点击item的时候viewpager的滑动效果
    mainViewPager.setCurrentItem(position, false)
    return true
}

private fun initViewPager() {
    mainViewPager.run {
        isUserInputEnabled = false
        offscreenPageLimit = 2
        adapter = object: FragmentStateAdapter(activity!!) {
            override fun getItemCount(): Int = fragmentList.size

            override fun createFragment(position: Int): Fragment = fragmentList[position]
        }
    }
}

相关文章

  • Android-ViewPager2的使用

    一、ViewPager2的变化 ViewPager2是用来替换ViewPager的,ViewPager2是fina...

  • Android-ViewPager2

    参考:https://www.jianshu.com/p/e754cbd2d329 1.简介。 今天我们介绍一下猪...

  • Android-ViewPager2

    ViewPager2 简单说就是将RecycleView再封装了一遍,然后协同FragmentStateAdapt...

  • Android-ViewPager2获取指定的Fragment

    最近在项目开发当中使用到ViewPage2控件,有一个需求需要获取当前的Fragment来实现的,这里分享一下,我...

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

  • 记录使用iframe的使用

    默认记录一下----可以说 这是我第一次使用iframe 之前都没有使用过; 使用方式: 自己开发就用了这几个属...

  • with的使用

    下面例子可以具体说明with如何工作: 运行代码,输出如下

  • this的使用

    什么是this? this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。...

  • this的使用

    JS中this调用有几种情况 一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象...

网友评论

      本文标题:Android-ViewPager2的使用

      本文链接:https://www.haomeiwen.com/subject/nxreuktx.html