我在使用支持库实现在程序中实例化片段时遇到问题。以下是我正在尝试执行的任务的简要说明以及我尚未尝试过的一些尝试:
我的应用程序的UI可能会发生变化,以满足用户的偏好。为了做到这一点,我正在为每个不同的布局使用Fragment,并根据用户的指示在给定时间替换UI中的活动Fragment。以下是我尝试(并且失败)的一些方法:
我尝试在我的Activity中添加Fragments作为非静态内部类。只要用户没有旋转设备,这种方法就有效。一旦用户旋转设备,应用程序就会崩溃(对于Portrait - > Landscape旋转和Landscape -> Portrait rotation)
都是如此。使用模拟器检查问题后,我得到 InstantiationException 。我检查了SO以获得一些帮助,这导致我:
将Fragment实现为静态内部类。当Fragment启动时,它将扩展其布局,然后从Activity的控制流程中稍后,我可以对Fragment的子视图执行操作(特别是,向按钮添加侦听器)。不幸的是,这不起作用,因为我无法使用[frag_name].getView().findViewById()
引用Fragment的子视图。关于在非静态上下文中引用静态对象的东西。再次,我检查了SO,这导致我:
将Fragment作为一个单独的类从Activity中实现。这似乎是开发人员在developer.android.com上推荐的文档。一旦这样做,一切似乎编译得很好,但是当我尝试引用Fragment的子视图时(再次使用[frag_name].getView().findViewById())
,我得到一个 NullPointerException 。当我添加System.out时。在我的代码中使用println()语句来确切了解发生了什么,我发现片段中onCreateView内的print语句永远不会被触发,这意味着onCreateView永远不会被触发。
所以现在,我被困住了。我究竟做错了什么?精确实现这个并不像从经验中学到一些东西那么重要,所以我可以在Android开发中变得更好,所以如果单独的类比静态类更好,反之亦然,我真的不关心我使用的是什么。 / p>
感谢。
答案 0 :(得分:0)
想出来。事实证明,为了做我想做的事情,我必须将Activity注册为每个片段的监听器,并在两者之间来回传递“准备启用按钮”消息。对于使用此问题进行进一步研究的任何人,有关如何执行此操作的指南位于Android开发人员指南中,此处:http://developer.android.com/training/basics/fragments/communicating.html