当前位置:   article > 正文

Android TabLayout+ViewPager2如何优雅的实现联动详解_viewpager2和tablayout关联

viewpager2和tablayout关联

一、介绍

Android开发过程中,我们经常会遇到滑动+导航栏的做法,之前的做法就是我们通过ViewGroup来转动,然后通过大量的自定义来完成,将导航栏item与viewpage

滑动,达到业务需求

二、现实方案

通过介绍,我们大概知道业务情况。针对这种需求,Google在material库中提供了一套解决方案,低代码就可以解决这类问题。

1.需要引入库

implementation 'com.google.android.material:material:1.5.0'

2.控件三剑客

TabLayout+ViewPager2+TabLayoutMediator
TabLayout

负责item的view,创建与管理,并提供了item的管理,和下划线的管理

app:tab开头,主要是tabview的管理,

app:tabIndicator:主要是对下划线管理,更多资料,可以自己实现
  1. <com.google.android.material.tabs.TabLayout
  2. android:id="@+id/layoutItem"
  3. android:layout_width="match_parent"
  4. android:layout_height="80dp"
  5. app:layout_constraintLeft_toLeftOf="parent"
  6. app:layout_constraintTop_toTopOf="parent"
  7. app:tabBackground="@null"
  8. app:tabGravity="fill"
  9. app:tabIndicatorHeight="2dp"
  10. app:tabIndicatorColor="@color/teal_200"
  11. app:tabIndicatorGravity="bottom"
  12. app:tabMaxWidth="0.0dp"
  13. app:tabIndicatorFullWidth="false"
  14. app:tabMode="fixed"
  15. />
ViewPager2:

就是我们常见的viewpage2,只要实现完即可。

TabLayoutMediator:

是管理tablayout与viewpage2的联动,不需要额外的任何支持。所有的滑动与联动关系已处理好了,实现了低代码

注意:正常viewpage2的itemcount要和tablayout准备的资源数组长度一样,否则出现数据越界或者达不到自己的要求。

  1. mediator= TabLayoutMediator(tablayout!!,viewPager!!,{tab,position->
  2. tab.text=titleArray.get(position)
  3. })
  4. if (!mediator!!.isAttached)
  5. {
  6. mediator!!.attach()
  7. }

以上就是绑定关系,tab的处理是通过准备好的资源,需要对tab处理,可以在回调中进行。

详细demo:

  1. class TabLayoutActivity:FragmentActivity() {
  2. private val titleArray by lazy { resources.getStringArray(R.array.title) }
  3. private var viewPager: ViewPager2? = null
  4. private var adapter: MyAdapter? = null
  5. private var tablayout:TabLayout?=null
  6. private var mediator:TabLayoutMediator?=null
  7. override fun onCreate(savedInstanceState: Bundle?) {
  8. super.onCreate(savedInstanceState)
  9. setContentView(R.layout.layout_tablayout)
  10. viewPager = findViewById(R.id.viewpage)
  11. adapter = MyAdapter(this)
  12. viewPager?.apply {
  13. orientation = ViewPager2.ORIENTATION_VERTICAL
  14. adapter = this@TabLayoutActivity.adapter
  15. }
  16. tablayout=findViewById(R.id.layoutItem)
  17. mediator= TabLayoutMediator(tablayout!!,viewPager!!,{tab,position->
  18. tab.text=titleArray.get(position)
  19. })
  20. if (!mediator!!.isAttached)
  21. {
  22. mediator!!.attach()
  23. }
  24. adapter!!.addData(titleArray.toMutableList())
  25. }
  26. inner class MyAdapter : FragmentStateAdapter {
  27. constructor(activity: FragmentActivity) : super(activity)
  28. private val mlsit = mutableListOf<Fragment>()
  29. override fun getItemCount(): Int {
  30. return mlsit.size
  31. }
  32. override fun createFragment(position: Int): Fragment {
  33. return mlsit.get(position)
  34. }
  35. public fun addData(list: List<String>) {
  36. list.forEachIndexed { index, it ->
  37. mlsit.add(MyFragment.getInstance(it))
  38. }
  39. notifyItemRangeChanged(0, mlsit.size)
  40. }
  41. }
  42. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/1017488
推荐阅读
相关标签
  

闽ICP备14008679号