4

これは非常に奇妙です。ログインすると、アクティビティのフラグメントが表示されるシンプルなアプリがあります。アプリには非アクティブな「タイムアウト」もあり、その後アクティビティが終了し、ログイン画面が表示されます。タイムアウトが発生したときにアプリがバックグラウンドにある場合は、アクティビティで次のイベントonCreateまたはonStartイベントが発生したときに終了します。

ただし、ログインしたアクティビティに戻ると、フラグメントの onActivityCreated メソッドで NPE を取得することがあります。フラグメントは非常に単純で、String のメソッドを呼び出すだけです。文字列自体は、getArguments() の呼び出しによって取得されます。フラグメントが作成されるたびに、引数が常に設定されることを確認しました。

したがって、フラグメント内で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)
4

2 に答える 2

3

getActivity()さらにデバッグを行った後、 before is calledの使用が原因で例外が発生することを発見しました。onActivityCreated()さらに、メソッドが呼び出されgetActivity()、メソッドは作成されたアクティビティに依存しています。/愚か者

于 2013-01-14T17:07:26.480 に答える
1

おそらく、フラグメントがバックグラウンドに入ったときに保存されないように文字列を保存していますか? コードがなければ、それが私が提供できる唯一の推測です。

問題を解決する 1 つの方法は、メソッドで単に null チェックを行うことonActivityCreatedです。ただし、それをどのように処理したいかによって異なります。

于 2013-01-14T16:09:33.783 に答える