这里的需求是动态的添加一个fragment到viewpager以及tablayout新增一个tab
效果图如下
(动图就没弄了,别问 问就是懒!!!!)
也就是点击右边的加号可以添加fragment到viewpager 然后tablayout也要多一个tab选项
开始实现(原理)
-
创建一个mFragment继承Fragment
这里主要是为了业务需求,因为添加的fragment肯定不会只是一个空白的fragment叭 所以需要在mFragment里面实现需要的逻辑和一些布局 -
布局文件里添加viewpager和tablayout
<com.google.android.material.tabs.TabLayout
android:id="@+id/tablayout"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
- 创建viewpager的适配器
open class Adapter(list:List<Fragment>, fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager) {
val mFragments: List<Fragment> = list
override fun getCount(): Int {
return mFragments.size
}
override fun getItem(position: Int): Fragment {
return mFragments.get(position)
}
}
- 准备工作差不多了 我先讲一段废话
这里加号按钮的作用就是添加一些数据到存储数据的地方对叭,然后我们用List 把这些数据从储存的地方读取出来就可以得到一个List咯 然后就可以开始下面的步骤了 - 在类里面要写的逻辑代码如下
val fragments = mutableListOf<Fragment>()
for (i in 0 until .list.size)
{
fragments.add(mFragment()) //添加mFragment 类型对象到fragments
}
val petinterfaceFragment = Adapter(
fragments,
childFragmentManager //由于我是在fragment里面添加的viewpager所以用的是 childFragmentManager 如果在Activity内用 supportFragmentManager
)
viewpager.adapter = petinterfaceFragment
for (i in 0 until list.size) {
tablayout.addTab(tablayout.newTab())
}
tablayout.setupWithViewPager(viewpager,false)
for (i in 0 until list.size){
tablayout.getTabAt(i)?.setText(list[i].tabname) //传入tab名字
}
这里动态添加fragment的原理都搞完了 其它的自己搞定!
文章写的匆匆忙忙有问题的地方希望指出来哦