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



这很奇怪。我有一个简单的应用程序,一旦登录显示在一个活动的片段。应用程序也有一个不活动的"超时"之后,它完成的活动,并显示登录屏幕-如果应用程序是在后台当超时发生时,然后当下一个onCreateonStart事件发生在活动它完成。

然而,有时当返回到登录的活动,我得到一个NPE在我的片段的onActivityCreated方法。这个片段非常简单,只是在一个String对象上调用一个方法。字符串本身通过调用getararguments()来检索。我已经验证了,无论何时创建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)

经过更多的调试,我发现异常发生是因为在onActivityCreated()被调用之前使用了getActivity()——此外,在getActivity()上调用了一个方法,该方法依赖于已经创建的活动。/白痴

也许你是存储字符串在这样一种方式,它不保存时,片段进入背景?没有代码,这是我唯一能提供的猜测。

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

最新更新