【发布时间】:2014-03-07 08:27:24
【问题描述】:
我已经成功实现了教程: http://developer.android.com/reference/android/support/v4/view/ViewPager.html,作为选项卡式浏览器活动,每个选项卡上都有片段。每个 Fragment 都维护着各种 UI 文本字段等,除了 getActivity() 之外,一切都运行良好,它在从任何 Fragment 调用时返回 null。
更新:阅读此内容,然后请在下面查看我自己的答案,以扩大有关此错误原因的范围。续:
但是,空状态会在一段时间后出现。最初,在 fragment.onStart() 中,getActivity() 正在工作,以便可以执行默认的 UI 设置。但是用户第一次进行更改时,getActivity() 已经返回 null。
奇怪的是,在同一时刻,仍然可以从 Activity 对片段 UI 字段进行任何更改,这意味着由于 context=activity 在 setSomeText(this, .. .),这将使片段能够进行相应的更改。当然,设计应该是 Fragment 负责它自己的详细任务。
将上下文保存在 onStart() 中没有帮助,因为该引用将在一段时间后指向 null。
教程中明确指出该功能处于早期开发阶段,但由于这个“null”问题在这里已经成为一个相当大的时间窃贼,而且我看到“getActivity 返回 null”是一个非常常见的问题,我想要大声思考与 ViewPager 和/或 Tab 结合时 getActivity() 中是否存在错误?
我花了这么长时间才发现这个问题是,很难猜测一个片段会永远失去对其活动的了解。无论如何,我正处于下一个障碍,只是想分享这个发现:不要信任 getActivity(),而是将上下文从 Activity 传递到其 Fragments 作为 set/get 方法或其他 api 中的参数。
【问题讨论】:
-
确保正确处理片段。文档很旧,并且可能没有更新关于该类处于早期开发阶段(经过几年的使用)。如果您有片段的
getActivity()返回 null 的特定场景,您应该在您的问题中添加一些代码实现以查看发生了什么。
标签: tabs null android-viewpager