フラグメント トランザクションをコミットしようとすると、IllegalStateException が発生します。エラーは「onSaveInstanceState の後でこのアクションを実行できません」です。これで、アクティビティが onResumeFragments を呼び出すまで、これらのトランザクションの実行を待つ必要があることがわかりました。アクティビティがバックグラウンド化された後にクラッシュが発生し、ボタンをクリックしてフラグメントを変更すると再開されます。10 秒待つことができますが、それでもクラッシュします。ホーム画面を押した後にアクティビティが再開すると、古いフラグメントがリロードされ、期待どおりに動作します。ユーザーが以下のコードを実行するボタンをクリックすると、クラッシュが発生します。クラッシュは commit() 呼び出しにあります。何がこれを引き起こしているのでしょうか?
フラグメントを変更するコード:
private void changeFragment(MyRoboFragment frag, boolean allowStateLoss) {
String fragName = frag.getClass().getName();
if (fragName.equals(currentFragmentName)) return;
currentFragmentName = fragName;
FragmentTransaction transaction = fragMan.beginTransaction();
transaction.replace(R.id.base_fragment, frag);
if (frag.pushToBackStack) {
transaction.addToBackStack(null);
}
if (allowStateLoss == true) {
transaction.commitAllowingStateLoss();
} else {
transaction.commit();
}
}