2013-03-21 34 views
7

在创建片段时,我遇到了getActivity()为null。 所以为了缩小这个问题,我在onAttach(活动活动)中保留了一个活动的本地副本,根据定义,它是附加到活动的时间。onAttach活动为空

但是,我在onAttach中记录了活动,但它仍然为空。

我只在2.3.6及以下版本遇到这个问题。

这是支持包的已知问题吗?

+0

旋转设备后会发生这种情况吗?无论如何,如果你等待'onActivityCreated()'会发生什么? – Sam 2013-03-21 16:42:30

+0

这个应用程序特别禁用了旋转。 onActivityCreated()仍然具有getActivity()作为null,因为之前我保留了一个本地副本来找出它的空位置。我的用户界面操作方式已经过去了,getActivity()仍然是空的。 – 2013-03-21 16:45:17

回答

-3

这个问题是因为支持包就意味着该片段是在Android 3.0及以上即API级别11和UP所以确保你将面临崩溃的应用程序为Android 2.3.6 gingerbird

this.getActivity(); 
+0

迈克已经知道这是支持包的一部分,这是一个链接到你自己的博客,你真的在​​那里回答这个问题吗?如果是这样,请在这里发布解决方案,如果不是这样,请删除它,因为您只是做广告而不回答问题。 – Sam 2013-03-21 16:48:42

+0

这不是一个正确的答案,做你的研究,不要宣传你自己的网站 – Tobrun 2013-03-21 16:50:38

+0

http://developer.android.com/reference/android/support/v4/app/Fragment.html – 2013-03-21 16:56:34

7

被称为将片段恢复到恢复状态的一系列方法是:

  • onAttach(Activity)一旦片段与其活动相关联就调用onAttach(Activity)。
  • onCreate(Bundle)调用来初始化片段的创建。
  • onCreateView(LayoutInflater,ViewGroup,Bundle)创建并返回与片段关联的视图层次结构。
  • onActivityCreated(Bundle)告诉片段其活动已完成自己的Activity.onCreate()。
  • onViewStateRestored(Bundle)告诉片段所有保存的视图层次结构状态已被恢复。
  • onStart()使片段对用户可见(基于其包含的活动正在启动)。
  • onResume()使片段与用户交互(基于其包含的活动正在恢复)。

bold方法应该是getActivity不再返回null的方法。

onAttach方法不应该用来调用活动对象的方法,它应该用来初始化回调接口。这些接口的一个例子可以参见here

+1

事实是,它是空的。我确定先调用super.onAttach,然后跟踪onAttach参数中的活动,它是空的。这是2.3.6用户中的一小部分,这让我怀疑它是一个错误。 getActivity(),不仅仅在onActivityCreated(Bundle)上,而且一直到onResume,都显示为null,这是促使我首先在onAttach上跟踪的原因。 – 2013-03-21 16:53:47

+1

我一直在大量的2.x设备上运行类似的代码。我曾经有类似的空指针,但是通过将一些代码移动到onResume()来解决这些问题。 – Tobrun 2013-03-21 16:56:32

+0

然后在onAttach中初始化侦听器的时候,它们可能会从null初始化并因此保持null本身。 – 2016-04-01 07:13:42