【问题标题】:Nesting tabs in Android 4 with support library (ActionBarSherlock)使用支持库 (ActionBarSherlock) 在 Android 4 中嵌套选项卡
【发布时间】:2012-08-06 12:00:36
【问题描述】:

在从 Android 2.1 运行且看起来像 Android 4(使用支持库片段)的应用中,让三层嵌套选项卡工作时遇到了严重问题。

目标

  • 应用应该有一个 ActionBar(有效,目前使用 ActionBarSherlock)
  • 主屏幕上的 3 个固定选项卡,即使屏幕足够大也不会移动到 ActionBar。这些选项卡中的第二个包含...
  • 用户首次登录时从服务器加载的大约 4 个选项卡。其中每一个都包含
  • 当用户第一次登录时,从服务器加载了大约 10 个可滑动的标签(例如在 Play 商店中)。我的想法是使用 ViewPagerIndicator,因为该库是由 ActionBarSherlock 的同一个人编写的,这应该将问题降至最低。但我对这里的想法持开放态度)。这些可滑动的标签中的每一个都包含当前是片段的内容,但可以更改。

问题

当这是一个 Android 2 应用程序时,它只是使用嵌套的 TabActivities,但这些并不适用于所有 Android 4 的东西。我可能不明白该怎么做,尤其是“你不能嵌套碎片”的限制让我很头疼。此外,似乎每个活动只能使用一个 FragmentManager,所以我在第二行选项卡中的每个选项卡中都有一个的想法不起作用(除了第一个选项卡之外的所有选项卡都保持为空)。 如何以正确的方式做到这一点?

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

【问题讨论】:

  • 为什么不将 tabactivities 用于主屏幕,将 viewpagerindicator 用于每个选项卡活动中的可滑动选项卡。
  • 因为actionbar的tab只取Fragments。在那里使用 TabActivity 不起作用。
  • @MichaelZinn 这是 Android 开发指南中提到的某处:'尤其是“你不能嵌套片段”限制'......我刚刚发布了一个类似的问题:stackoverflow.com/questions/15608935/… 因为我寻找类似的东西。

标签: android tabs actionbarsherlock viewpagerindicator


【解决方案1】:

PagerAdapter 不需要 Fragments 作为子级。您可以在其中膨胀/管理自己的自定义视图。所以你可以继续使用嵌套的TabActivities。或者,您可以将Fragments 放在顶层,并在底层ViewPager 中管理您自己的Views

理论上,如果您想将片段保留在ViewPager 中,您也可以使用ViewFlipper。您必须编写自己的LinearLayoutButtons 作为标签,但这很容易。如果您正在寻找 Holo 外观,只需将样式设置为 ABS 中的样式即可。

另一种选择是使用TabHost,而不使用TabActivity。您甚至可以将它与 Fragments 一起使用。请参阅示例here

另请注意:如果您正在寻找 Google Play 风格的 ViewPagerIndicator,现在包含在支持包中:PagerTitleStrip

我想你最好的选择是使用 Fragments 作为顶层,因为这将有助于内存消耗。

也就是说,

我必须说这听起来像是一个糟糕的 UI 模式。更糟糕的是,我们在一个Activity 中讨论了很多 夸大的观点。您可能会在此处遇到内存问题,具体取决于显示的内容。我建议大量使用ViewStubs,如果您将ViewPager 保留在底部,则进行回收。

继续尝试推动客户端将 ActionBar 微调器模式 用于顶级(主要 3 个选项卡),甚至考虑使用花哨的 滑动抽屉 模式。也许流畅的动画足以影响他们的意见。

将它们参考官方设计网站,并展示流行导航模式的示例,例如 Gmail、YouTube、Google+、Evernote 等中的导航模式。我最近处理了一个客户,要求与您描述的模式完全相同,之后数周的推动让他们相信超过 2 层的标签是不可接受的

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

【讨论】:

  • 谢谢,这个评论区太小了,不能完全写出我所做的,但基本上我最终说服了客户更改 GUI。 :)
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
相关资源
最近更新 更多