ViewPager with Nested Fragments?

前端 未结 2 595
萌比男神i
萌比男神i 2021-01-31 12:43

My problem

According to the Google\'s docs:

You can now embed fragments inside fragments. This is useful for a variety of situations in which

2条回答
  •  旧巷少年郎
    2021-01-31 13:13

    There is no reason to do any of the outlined hacks. If you're using ViewPager and PagerAdapter (not sure if they existed at the time of the question), you can use a FragmentPagerAdapter to manage the swipeable tab fragments for you.

    class MyFragmentPagerAdapter(
      private val context: Context,
      fragmentManager: FragmentManager
    ) : FragmentPagerAdapter(fragmentManager) {
      override fun getCount() = 2
    
      override fun getItem(position: Int) = when(position) {
        0 -> FirstFragment()
        1 -> SecondFragment()
        else -> throw IllegalStateException("Unexpected position $position")
      }
    
      override fun getPageTitle(position: Int): CharSequence = when(position) {
        0 -> context.getString(R.string.first)
        1 -> context.getString(R.string.second)
        else -> throw IllegalStateException("Unexpected position $position")
      }
    }
    

    And

    class ParentFragment: Fragment() {
      override fun onCreateView(...) = ...
    
      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewPager.adapter = MyFragmentPagerAdapter(requireContext(), childFragmentManager)
        tabLayout.setupWithViewPager(viewPager)
      }
    }
    

提交回复
热议问题