2016-05-18 11 views
0

最初に、これは重複した質問ではないと思われますが、エラーの解決方法は多くの時間を要しています。私は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がトリガーされる前にフラグメントトランザクションを実行する方法があります。

答えて

0

この活動の方向はsensorLandscapeでした。画面がロックされると、画面がポートレートに変換され、画面のロックが解除されると、ポートレートモードから開始され、その後、ランドスケープになります。したがって、画面がロックされているときにonDestroyが呼び出されました。画面のロックが解除されると、onCreateが呼び出されます。この方向の変更は、マニフェストで設定されたアクティビティの方向を上書きします。この強制的な方向が発生したときに何が起こるかは、android:configChanges="orientation|screenSize|keyboardHidden"/>をマニフェストに追加することによって制御できます。これにより、onDestroyが呼び出されることを防ぎ、 "illegalStateException"を回避することができます。

関連する問題