android学习笔记 viewpager2+fragmentstateAdapter实现多页面滑动

本文介绍如何在Android应用中使用ViewPager2结合FragmentStateAdapter实现动态加载多个Fragment,并通过TabLayout实现滑动标签页功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先在fragment或者activity中放置一个viewpager2

 然后在创建一个fragmentstateAdapter的子类  重写里面的 createFragment()、getItemCount()、containsItem()和getItemId()四个方法

class DemoCollectionAdapter(fragment: Fragment,val fragmentlist:List<Fragment>) : FragmentStateAdapter(fragment) {//fragment 也可以换为 activity
    private val fid2 = 222L
    private val fid3 = 333L
    private val ids = arrayListOf(fid2,fid3)
    private val creatID= hashSetOf<Long>()
    override fun getItemCount(): Int {
        return fragmentlist.size
    }

    override fun createFragment(position: Int): Fragment {
        val id = ids[position]
        creatID.add(id)
        val fragment = fragmentlist[position]
        fragment.arguments = Bundle().apply {
            putInt(ARG_OBJECT,position+1)
        }
        return fragment
    }//返回需要创建的fragment

    override fun containsItem(itemId: Long): Boolean {
        return creatID.contains(itemId)
    }//判断是否包含创建的ID(解决fragment数据为动态时无法刷新的问题)

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }
}

然后在ViewPager2所在的类进行适配器的实例化等

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
            list.add(Fragment2())
            list.add(Fragment3())
            val tabLayout = view.findViewById<TabLayout>(R.id.tab_layout)
             viewPager = view.findViewById(R.id.pager)
            TabLayoutMediator(tabLayout,viewPager){ tab,position ->
                tab.text = "osjaod${position+1}"//创建和fragment一起滑动的Tab
            }.attach()
            demoCollectionAdapter = DemoCollectionAdapter(this,list)

            viewPager.adapter = demoCollectionAdapter
        }

和使用一般的适配器一样

补充,可以使用TabLayout添加一个可以和fragment一起滑动的Tab

 最终效果

在使用导航组件进行fragment中嵌套fragment时,可以自定义返回导航来处理返回。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值