3

這很奇怪。我有一個簡單的應用程序,一旦登錄就會在活動中顯示一個片段。該應用程序還有一個不活動的「超時」,在該時間結束該活動並顯示登錄屏幕 - 如果該應用程序在超時發生時處於後臺,則在完成活動中發生下一個onCreateonStart事件。在完成onCreate中的活動時,我的片段的onCreateView在onCreate之前如何調用?

但有時當返回到登錄的活動中時,我在片段的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

你可以應該的源代碼? – wtsang02

回答

1

也許您正在存儲字符串,以便在片段進入背景時不會保存該字符串?沒有代碼是我能提供的唯一猜測。

解決您的問題的一種方法是簡單地在您的onActivityCreated方法中執行空檢查。取決於你想如何處理它。

3

一些更多的調試,我已經發現了異常發生後,因爲onActivityCreated()之前使用的getActivity()被稱爲 - 而且一個方法被調用getActivity()和方法依賴於已創建的活動。 /白癡

+0

你知道你所調用的方法依賴於創建的活動嗎? –

相關問題