gpt4 book ai didi

android - 如何使用嵌套 fragment (Android 4.2)在 ViewPager 中添加 fragment

转载 作者:IT王子 更新时间:2023-10-28 23:39:48 33 4
gpt4 key购买 nike

我有一个 ViewPager,其中包含三个 Fragments,每个 fragment 显示一个 List(或 Grid)。

在新的 Android API 级别 17(Jelly Bean 4.2)中,其中一项功能是 Nested Fragments .新的功能描述说:

if you use ViewPager to create fragments that swipe left and right and consume a majority of the screen space, you can now insert fragments into each fragment page.

所以,如果我理解正确,现在我可以创建一个 ViewPager,其中包含 Fragments(例如,里面有一个按钮),当用户按下按钮时显示另一个Fragment 不松散ViewPager 使用这个新功能。

我花了一上午的时间尝试以几种不同的方式实现它,但我无法让它工作......有人可以添加一个如何实现它的简单示例吗?

PS:我只对这种方式感兴趣,用 getChildFragmentManager 来了解如何工作。

最佳答案

假设您已经创建了正确的 xml 布局。现在在另一个 Fragment 托管的 ViewPager 中显示 Fragment 非常简单。

以下是显示子 fragment 的父 fragment :

class ParentViewPagerFragment : Fragment() {

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val root = inflater.inflate(R.layout.fragment_parent_viewpager, container, false)

val viewPager = root.findViewById(R.id.viewPager) as ViewPager
// Important: Must use the child FragmentManager or you will see side effects.
viewPager.adapter = MyAdapter(childFragmentManager)

val tabStrip = root.findViewById<TabLayout>(R.id.pagerTabStrip)
tabStrip.setupWithViewPager(viewPager)

return root
}

class MyAdapter internal constructor(fm: FragmentManager) : FragmentPagerAdapter(fm) {

override fun getCount(): Int = 4

override fun getItem(position: Int): Fragment {
val args = Bundle().apply { putInt(ChildFragment.POSITION_KEY, position) }
return ChildFragment.newInstance(args)
}

override fun getPageTitle(position: Int): CharSequence = "Tab $position"
}

companion object {
val TAG: String = ParentViewPagerFragment::class.java.name
}
}

在实例化 FragmentPagerAdapter 时使用 Fragment.getChildFragmentManager() 很重要。另请注意,您不能在子 fragment 上使用 Fragment.setRetainInstance() ,否则会出现异常。为简洁起见,省略了导入。

源代码见: https://github.com/marcoRS/nested-fragments

关于android - 如何使用嵌套 fragment (Android 4.2)在 ViewPager 中添加 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13379194/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com