使用支持库(ActionBarSherlock)在Android 4中嵌套选项卡

13

我在一个从Android 2.1到4的应用程序中遇到了一个严重的问题,无法使三层嵌套的选项卡正常工作(使用支持库片段)。

目标

  • 应用程序应该有一个ActionBar(目前使用ActionBarSherlock实现)
  • 主屏幕上有3个固定选项卡,即使屏幕足够大也不会移动到ActionBar中。其中第二个选项卡包含...
  • 首次登录时从服务器加载的约4个选项卡。其中每个选项卡都包含:
  • 首次登录时从服务器加载的大约10个可滑动选项卡(类似于Play Store)。我的想法是使用ViewPagerIndicator,因为该库由ActionBarSherlock的同一作者编写,这应该将问题降至最低。但我对此持开放态度)。这些可滑动选项卡中的每一个都包含一些当前作为Fragment的内容,但可能会更改。

问题

当它是一个Android 2应用程序时,它简单地使用嵌套的TabActivities,但这些不适用于所有Android 4功能。我不理解如何正确地做到这一点,尤其是“您无法嵌套片段”限制令我头疼。而且,似乎每个Activity只能使用一个FragmentManager,所以我在第二行选项卡中的每个选项卡中都使用了一个FragmentManager的想法并没有奏效(除了第一个选项卡以外,其他所有选项卡都为空)。 如何正确地做到这一点?

(请理解“使用不同的GUI设计”不是一个选项,因为这就是客户要求的,他不会重新考虑)


为什么不在主屏幕上使用TabActivities,在每个选项卡活动中使用Viewpagerindicator来实现可滑动的选项卡呢? - Gautham
因为ActionBar的选项卡只能使用Fragments,所以无法使用TabActivities。 - Michael Zinn
@MichaelZinn 这个“特别是“你不能嵌套片段”的限制”在Android开发指南中有提到吗?我刚刚发布了一个类似的问题:https://dev59.com/DmUo5IYBdhLWcg3w_DpK,因为我正在寻找类似的东西。 - Mathias Conradt
1个回答

3
PagerAdapter不要求其子项必须是Fragments,你可以在其中填充/管理自己的自定义视图。因此,您可以继续使用嵌套的TabActivities。或者,您可以将Fragments放在顶层,并在底层ViewPager中管理自己的Views

理论上,如果您想保留ViewPager中的Fragments,则还可以使用ViewFlipper。您将需要编写自己的带有按键的LinearLayout,但这很容易。如果您正在寻找Holo外观,请将样式设置为ABS中找到的样式。

另一种选择是在不使用TabActivity的情况下使用TabHost。您甚至可以在其中使用Fragments。请参见此处的示例here.

还要注意:如果您正在寻找Google Play风格的ViewPagerIndicator,则现在已包含在支持软件包中:PagerTitleStrip

我认为您的最佳选项是将Fragments用作顶级,因为这将有助于节省内存消耗。

话虽如此,

我必须说,这听起来像是一种可怕的UI模式。更糟糕的是,我们在一个Activity中涵盖了大量的填充视图。根据所显示的内容,您可能会遇到内存问题。如果您保留底部的ViewPager,建议大量使用ViewStubs和回收。

继续努力推动客户采用ActionBar spinner pattern作为顶层(主要3个选项卡),甚至考虑花哨的sliding drawer模式。也许那种流畅的动画足以使他们改变想法。

将他们引用官方设计网站,并展示像Gmail、YouTube、Google+、Evernote等中发现的流行导航模式的示例。最近,我处理了一个客户请求与您描述的完全相同的模式,在推动数周后,成功地说服他们超过2层的选项卡是不可接受的

您还可以向他们展示我的Wall of Shame Google +页面,其中突出显示了流行Android应用程序中使用的糟糕设计模式:Android UI Anti-Patterns。:-)


谢谢,这个评论框太小了,无法准确描述我所做的事情,但基本上我最终说服了客户改变GUI界面。 :) - Michael Zinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接