0

我在使用支持库实现在我的程序中实例化片段时遇到问题。以下是我正在尝试执行的任务的简要描述以及我尚未取得成果的一些尝试:

我的应用程序的 UI 可能会根据用户偏好进行更改。为了做到这一点,我为每个不同的布局使用一个片段,并根据用户的说明在给定时间替换 UI 中的活动片段。以下是我尝试(但失败)的一些方法:

  • 我尝试在我的活动中将片段添加为非静态内部类。只要用户不旋转设备,这种方法就有效。用户旋转设备后,应用程序立即崩溃(对于 Portrait -> Landscape rotationLandscape -> Portrait rotation). :

  • 将 Fragment 实现为静态内部类。当 Fragment 启动时,它会扩展其布局,然后在稍后的 Activity 控制流中,我可以对 Fragment 的子视图进行处理(特别是向按钮添加侦听器)。不幸的是,这不起作用,因为我无法使用[frag_name].getView().findViewById(). 关于在非静态上下文中引用静态对象的一些事情。我再次检查了 SO,这导致我:

  • 将 Fragment 实现为与 Activity 完全不同的类。这似乎是 developer.android.com 上的开发文档推荐的内容。这样做后,一切似乎都可以正常编译,但是当我尝试引用 Fragment 的子视图时(再次使用[frag_name].getView().findViewById()),我得到一个NullPointerException。当我在我的代码中添加 System.out.println() 语句以找出确切的内容时正在发生,我发现片段中 onCreateView 内的打印语句永远不会被触发,这意味着 onCreateView 永远不会被触发。

所以现在,我被困住了。我究竟做错了什么?这一点的精确实现并不像从经验中学习一些东西那么重要,因此我可以在 Android 开发方面做得更好,所以如果单独的类比静态类更好,反之亦然,我真的不在乎我使用哪个。

谢谢。

4

1 回答 1

0

弄清楚了。事实证明,为了做我想做的事,我必须将 Activity 注册为每个片段的侦听器,并在两者之间来回传递“准备启用按钮”消息。对于使用此问题进行进一步研究的任何人,有关如何执行此操作的指南位于 Android 开发人员指南中,此处为:http: //developer.android.com/training/basics/fragments/communicating.html

于 2012-09-08T07:58:59.690 回答