最初に、これは重複した質問ではないと思われますが、エラーの解決方法は多くの時間を要しています。私はatleast 5つの異なる解決策を試みたが、彼らは何も変更しないか、物事を悪化させない。私は、画面がロックされている/フォーカスが変更されたときにアクティビティを一時停止し、再び開いたときにアクティビティの一時停止を許可したい。スクリーンロックに応答してフラグメントを追加するとIllegalStateExceptionが発生する
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!hasFocus && pauseFragment == null) {
exercisePlayPause(isPaused, workoutExerciseNum);
isPaused = !isPaused;
}
}
exercisePlayPauseは、ホームボタンが押されたか、他のいくつかのアプリが起動しているか、通知バーをクリックしたときにこれが正常に動作し、以下の方法
public void PassExerciseNum(int exerciseNum, Boolean isPaused) {
if (!isPaused) {
pauseFragment = new PauseFragment();
pauseFragment.getExNum(exerciseNum);
getFragmentManager().beginTransaction().add(R.id.aworkout_layout, pauseFragment, "pause").commit();
} else {
getFragmentManager().beginTransaction().remove(pauseFragment).commit();
pauseFragment = null;
exercisePlayPause(true, exerciseNum);
}
}
を呼び出します。画面がロックされている場合しかし、私は、問題のある行がgetFragmentManager().beginTransaction().add(R.id.aworkout_layout
で、次のエラーに
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1411)
at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1429)
at android.app.BackStackRecord.commitInternal(BackStackRecord.java:687)
at android.app.BackStackRecord.commit(BackStackRecord.java:663)
を取得します。ユーザーをアプリから離れるようにするイベントが発生した場合、私はいくつかのプロセスを一時停止しています。ユーザーがアプリに戻ると、そこから再開できます。したがって、私は活動を破壊していません。私はcommitAllowingStateLoss()
を使用しようとしましたが、それは一時停止したプロセスのデータを失い、ちょっと乱雑になります。
要するに、画面ロックボタンが押されたときにonSaveInstanceStateがトリガーされる前にフラグメントトランザクションを実行する方法があります。