我正在使用 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/