【问题标题】:How can I insert a tab at an arbitrary position instead of the last?如何在任意位置而不是最后一个位置插入选项卡?
【发布时间】:2018-07-12 10:10:28
【问题描述】:

我可以使用addTab() 方法将新标签添加到TabHost。但这将始终将选项卡添加为最后一个选项卡。如何在TabHost 中除最后一个位置之外的其他位置添加选项卡?例如,如何将新选项卡作为第一个选项卡或其他任意位置插入?

我不想使用 XML,但一切都应该以编程方式完成。

我想到的一个解决方案是首先通过在TabHost 上调用clearAllTabs() 来删除所有选项卡,然后按照我想要的顺序重新添加所有选项卡。但这当然是一个非常骇人听闻的解决方案。没有更好的吗?

【问题讨论】:

    标签: android android-tabhost


    【解决方案1】:

    显然没有。如果您查看TabHost 源代码,向mTabSpecs 添加内容的唯一方法是通过addTab 方法。扩展课程也无济于事,因为列表是 private

    所以,正如你所说,使用clearAllTabs() 是最不“hacky”的方式。我认为用例本身并不重要,所以我可以理解为什么实现行为不是那么简单。但我不会称其为“非常老套”的解决方案。没有进行 Java 反射,它只是使视图容器无效并向其添加新的视图列表。它不会影响性能、内存、可读性,也不会在 SDK 更新或类似情况下中断。所以我很确定它完全没问题。

    【讨论】:

    • 谢谢,有没有办法从TabHost 获取单个选项卡视图,还是我必须手动缓存它们?从文档看来,我只能使用getCurrentTabView() 获取当前选项卡视图。我看不到如何从TabHost 获取非当前选项卡视图,所以我想我必须手动跟踪它们?
    • 是的。在TabHost 中有一个方法getTabWidget,它有一个方法getChildTabViewAt(int index)。这将为您返回与给定索引对应的视图。但请务必在使用前检查索引是否有效。您可以在此处获取计数选项卡:developer.android.com/reference/android/widget/…
    • 您确定getChildTabViewAt() 是正确的方法吗? Doc 说它返回标签 indicator 视图,而我正在寻找标签 content 视图。我看不到任何获取标签内容视图的方法...
    • 是的,我确定。看看TabHost 的实现,看看getCurrentTabView() 是如何实现的。这是它的作用:return mTabWidget.getChildTabViewAt(mCurrentTab);。由于mTabWidget 可以通过getTabWidget() 访问,并且该方法是公开的,因此您可以安全地通过索引从中获取选项卡视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多