android - 为什么我的 TabHost 的 FrameLayout 的唯一 child 加载了 visibility = View.GONE?

标签 android android-widget

我正在使用 TabHost 来呈现一些选项卡。在 XML 定义中,一切都已设置好 ~ 通常,RelativeLayout 是 TabHost 的 FrameLayout 的唯一子项。

奇怪的是,相对布局总是加载为 View.GONE。在 XML 文件中设置 RelativeLayout 的可见性不会改变这一点。在 onCreate 期间调用 .setVisibility 以手动使 RelativeLayout 可见有效,但感觉不对。在选项卡之间切换也会使 RelativeLayout 再次可见。

我是否遗漏了一些基本的东西?将选项卡手动指定为 FrameLayout 的 XML 子项是否正常?

最佳答案

我最终花了一些时间阅读 TabHost.java 并发现了正在发生的事情。

  • TabHost.java(IMO 天真 ;))假定不同的选项卡附加到不同的内容 View 。

  • 每次将内容 View 添加到 TabSpec 时, View 的可见性都会设置为“消失”。

  • 每次将 TabSpec 添加到 TabHost 时,TabHost 都会切换到选项卡 0。

  • 每次调用 setCurrentTab 时,当且仅当新选择的选项卡不是当前选项卡时,该选项卡的 View 的可见性才设置为 VISIBLE。

当为同一 View 添加一堆选项卡时:

  • 首先添加 View 并将其可见性设置为 GONE,
  • 然后 TabHost 切换到选项卡 0 并将 View 的可见性设置为 VISIBLE,
  • 然后添加下一个选项卡并将其 View (相同 View !)的 vis 设置为 GONE,
  • 然后 TabHost 切换到选项卡 0,这是一个 ~noop,因为之前选择了选项卡 0,因此 View 不会切换回 VISIBLE。

所以这是由于对多个选项卡的内容使用相同的 View 造成的。

因此,要修复此调用:tabHost.getCurrentView().setVisibility(View.VISIBLE); ...添加所有选项卡后

关于android - 为什么我的 TabHost 的 FrameLayout 的唯一 child 加载了 visibility = View.GONE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5109081/

相关文章:

android - 自定义 ActionBar View 中的微调器

c# - 访问 Easy Movie Texture 的文件路径

Android: imageview touch 并发布

android-layout - Android Widget 命名标准

android - 保存和检索选定的微调器位置

android - 如何在 Android 中制作工具栏(如辅助操作栏)?

java - 尝试使用 Java 从字符串创建 JSONObject (Android Studio)

php - 标记无法解析为变量

java - Android:将房间数据库链接和同步到在线服务器数据库

android - 带有自定义适配器的微调器不会在选择时消失