这很奇怪。我有一个简单的应用程序,登录后显示活动中的片段。该应用程序还具有不活动“超时”,此后它将完成活动并显示登录屏幕 - 如果应用程序在后台发生超时,则表示下一个onCreate
或onStart
事件发生在它完成的活动中。
然而,有时当返回登录活动时,我会在片段的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)
答案 0 :(得分:3)
经过一些调试后,我发现由于在调用getActivity()
之前使用onActivityCreated()
而发生异常 - 而且在getActivity()
上调用了一个方法,并且该方法依赖于活动已经创建。 /白痴
答案 1 :(得分:1)
也许你存储的字符串是这样的,当片段进入后台时它不会被保存?没有代码,这是我能提供的唯一猜测。
解决问题的一种方法是在onActivityCreated
方法中进行空检查。取决于你想如何处理它。