在完成onCreate中的活动时,我的片段onCreateView在onCreate之前是如何调用的?

时间:2013-01-14 16:01:42

标签: android android-fragments nullpointerexception android-fragmentactivity ondestroy

这很奇怪。我有一个简单的应用程序,登录后显示活动中的片段。该应用程序还具有不活动“超时”,此后它将完成活动并显示登录屏幕 - 如果应用程序在后台发生超时,则表示下一个onCreateonStart事件发生在它完成的活动中。

然而,有时当返回登录活动时,我会在片段的onActivityCreated方法中获得NPE。该片段非常简单,只需在String上调用一个方法。通过调用getArguments()来检索字符串本身。我已经验证,无论何时创建Fragment,参数都会被设置。

所以似乎某种方式onActivityCreated实际上是在片段onCreate之前调用的,我知道这应该是不可能的。下面是堆栈跟踪的一部分:

01-14 15:34:37.176: E/AndroidRuntime(3272):     at com.example.app.fragment.MyFragment.onActivityCreated(MyFragment.java:203)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1468)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.support.v4.app.FragmentManagerImpl.dispatchReallyStop(FragmentManager.java:1888)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.support.v4.app.FragmentActivity.onReallyStop(FragmentActivity.java:787)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.support.v4.app.FragmentActivity.doReallyStop(FragmentActivity.java:764)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:322)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at com.actionbarsherlock.app.SherlockFragmentActivity.onDestroy(SherlockFragmentActivity.java:261)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at com.example.app.MyActivity.onDestroy(MyActivity.java:195)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.app.Activity.performDestroy(Activity.java:5273)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1110)
01-14 15:34:37.176: E/AndroidRuntime(3272):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3562)

2 个答案:

答案 0 :(得分:3)

经过一些调试后,我发现由于在调用getActivity()之前使用onActivityCreated()而发生异常 - 而且在getActivity()上调用了一个方法,并且该方法依赖于活动已经创建。 /白痴

答案 1 :(得分:1)

也许你存储的字符串是这样的,当片段进入后台时它不会被保存?没有代码,这是我能提供的唯一猜测。

解决问题的一种方法是在onActivityCreated方法中进行空检查。取决于你想如何处理它。