我有很多片段的唯一活动。 在其中一个片段中,我现在必须在里面有几个标签。我能想到的方法是:
解决方案1 - 仅为此创建新活动,然后实施ViewPager:
我对该解决方案的主要关注点是: 到目前为止,在我的Activity上,我有以下流程: 片段1 - >片段2 - >片段 - > 3 - >片段4 - >等等...
现在,假设我必须在片段3中实现这些选项卡。
从片段2开始,我开始一个新的活动,放置一个viewpager(片段3在其中一个选项卡中,其他选项卡在其他选项卡中)。然后我需要能够显示片段4。但是,由于应用程序中的所有片段都放在原始活动上,它会混淆流量甚至更糟。换句话说导致:解决方案2 - 结果活动(使用视图寻呼机):
为标签屏幕创建的活动可以是返回原始活动的活动。所以流程将是这样的: 片段2 - >结果的新活动 - >将结果发送回原始活动,表明它现在需要启动片段4 - >原始活动打开片段4。
然而,在这种情况下,如果我从片段4向后移动,它会把我扔回到片段2而不是那个标签屏幕(3)。
解决方案3 - 标签布局:
似乎是最佳解决方案。
但是,要使用我需要getChildFragmentManager()
,这需要api 17及以上。我的api是16岁。
现在,如果我使用getSupportChildFragmentManager()
,我将不得不使用片段v4。这个问题是我的所有片段都是原生的,我不能只将片段3改为v4,因为之前的片段和后面的片段也必须是v4。因为我有大约50个片段,所以不能更改所有片段。
解决方案3的另一个问题
我遇到过,它是崩溃和打印:Error inflating class android.support.design.widget.TabLayout
我尝试创建一个名为values-v21的新文件夹,并在那里为标签布局创建了一个styles.xml,但由于某些原因这没有用。
我希望我说清楚。
答案 0 :(得分:1)
你有另一个从解决方案3派生的解决方案。这是为了保持你当前的导航(fragment1-> fragment2->等)并构建一个片段来保持ViewPager的布局简单而不是嵌套片段。通过这种方式,您可以避免:导航问题,版本16(您计划支持)中存在问题的嵌套api,并且您还将避免重构使用支持片段api。
如果稍后您放弃对版本16的支持,您可以在嵌套片段中重构每个简单布局并使用本机getChildFragmentmanager()。