问题 支持库v13中的getChildFragmentManager在哪里?


Android支持库v13应该为Android 3.1中的新API提供支持。但是,据我所知,没有儿童片段的支持。具体来说,getChildFragmentManager()在哪里? v13支持库依赖于本机片段,在API级别17之前没有添加此方法。我有一个最低SDK级别14的应用程序,所以我应该能够使用v13支持库,但似乎我不能。

我不想一直回到v4支持库并承担它的全部重量。 v13库是完美的。


10616
2018-02-18 23:36


起源

关于v4库的误解:它不仅仅适用于v12左右,它向下兼容v4。 - zapl
“重量”是什么意思? v13库已经包含了所有的v4库,如果你只使用v14 +方法,那么你应该只需要几个单词替换。 - ianhanniballake
如果我将最低SDK级别设置为14,我不应该使用它。 - Greg Ennis
如果v13包含v4的全部内容那么它的目的是什么?这不对... v13库使用本机片段和活动,而不支持片段 - Greg Ennis


答案:


如果要在本机片段中使用嵌套片段。使用getFragmentManager()。

如果要在支持库Fragment中使用嵌套片段,请使用getChildFragmentManager()。

刚发现这是偶然的。有用。 :)


7
2017-10-07 15:19



同意 - 我在方法getChildFragmentManager()上调用v4 Fragment库并且它可以工作。 - Simon
我在fragmentPagerAdapter中使用嵌套片段。它工作正常!一个警告:我必须在其父的onPause()方法中分离我的嵌套片段,否则fragmentManager会尝试将嵌套片段插入到视图中,但视图将不存在。 - mcissel
谷歌只是忘了添加getChildFragmentManager()来支持库v13! - Behzad Bahmanyar


Android支持库v13应该为Android 3.1中的新API提供支持

不是真的。

但是,据我所知,没有儿童片段的支持

正确。您无法在Java中更改外部库中的现有类。 android.app.Fragment 已存在,因此库无法添加方法 Fragment

我有一个最低SDK级别14的应用程序,所以我应该可以使用v13支持库,但似乎我不能。

您可以简单地不使用嵌套片段。或者,使用片段backport。

我不想一直回到v4支持库并承担它的全部重量

android-support-v13.jar 大于 android-support-v4.jar

如果v13包含v4的全部内容那么它的目的是什么?

它添加了一些类,如本机片段实现 FragmentPagerAdapter 和 FragmentStatePagerAdapter,对于没有本机片段的应用程序不需要,因为他们的 android:minSdkVersion 低于11。

v13库使用本机片段和活动,而不支持片段

android-support-v13.jar 包含所有的 android.support.v4 和所有的 android.support.v13 SDK中的类。


3
2018-02-18 23:45



谢谢你的澄清,但这种情况似乎总是一团糟,比我想象的还要糟糕。如果我使用支持库,为什么我需要一个采用原生片段的FragmentPagerAdapter?我应该只使用支持片段。所以我仍然没有看到v13支持库的目的。这是一团糟。 - Greg Ennis
@GregEnnis:“如果我使用支持库,为什么我需要一个采用原生片段的FragmentPagerAdapter?” - 并非每个人都需要嵌套片段。那些不需要嵌套片段的人可以使用本机片段实现。 您 是决定的人 您 想要使用嵌套片段,为此你需要再使用backport。 - CommonsWare
好吧,我仍然认为使用带有原生片段的v13更轻量级,如果你的目标是SDK 14,那就是前进的方法,因为proguard会优化掉我不需要的所有支持垃圾。所以我只是不会使用嵌套的碎片,尽管我仍然坚持认为这是一团糟。 - Greg Ennis
这确实是一个绝对的混乱。而@CommonsWare,你的回答并不像你的傲慢那样表现出你的智慧。如果您没有使用嵌套片段,那么您将在几年前设计一个有限Android的用户体验(已经落后于iOS CocoaTouch架构几年)。您应该使用嵌套片段并利用它们的好处,并尝试赶上现代UI,而不是受到Android的古老(错误)架构的约束。由于没有使子片段与v13支持库正确兼容,谷歌再次放弃了这个球。 - Marchy
@Marchy:“如果您没有使用嵌套片段,那么您将在几年前设计有限Android的用户体验体验” - 不,您只是没有使用嵌套片段。如果没有片段,片段无法解决任何问题。除非完全实现为支持SDK的源代码,否则您不能将片段的backport作为库。无论该库可以做什么,我们都可以使用自己的源代码。通过扩展,对于无法通过其他方式解决的嵌套片段,您无法做任何事情。 - CommonsWare


你应该只使用v4支持库片段。那么你可以使用嵌套片段w / api 14.这样做没有真正的缺点。它们已包含在v13支持库中(包括所有v4)


0
2017-10-07 15:23



v13不包括getChildFragment! - jonney
当然可以。 developer.android.com/reference/android/support/v4/app/... - dabluck
犯规。需要v4来访问该方法 - jonney
v4在v13中。 v13是v4的超集。所以,如果是在v4中,它是在v13我的朋友。就像我在你发表评论的原帖中说的那样。你有什么困惑的? - dabluck
我的意思是v13活动没有获得子片段方法,你可以尝试将它用于标准片段 - jonney