Pertama, saya yakin ini bukan pertanyaan duplikat, meskipun solusi untuk kesalahan tersebut telah ditanyakan berkali-kali. Saya telah mencoba setidaknya 5 solusi berbeda tetapi tidak mengubah apa pun atau memperburuk keadaan. Saya ingin menjeda aktivitas saat layar terkunci/fokus diubah dan mengizinkan pengguna untuk membatalkan jeda aktivitas saat aplikasi dibuka kembali.
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!hasFocus && pauseFragment == null) {
exercisePlayPause(isPaused, workoutExerciseNum);
isPaused = !isPaused;
}
}
workoutPlayPause memanggil metode berikut
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);
}
}
Ini berfungsi dengan baik ketika tombol beranda ditekan atau aplikasi lain diaktifkan atau bilah notifikasi diklik. Namun ketika layar terkunci maka saya mendapatkan error berikut
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)
Baris yang menyinggung adalah getFragmentManager().beginTransaction().add(R.id.aworkout_layout
. Saya menjeda beberapa proses ketika ada peristiwa yang membuat pengguna menjauh dari aplikasi. Dan ketika pengguna kembali ke aplikasi, dia dapat melanjutkan dari sana. Oleh karena itu, saya tidak menghancurkan aktivitas tersebut. Saya telah mencoba menggunakan commitAllowingStateLoss()
tetapi itu membuat saya kehilangan data untuk proses yang dijeda dan menjadi sedikit berantakan.
Jadi singkatnya pertanyaannya adalah bagaimana membuat transaksi fragmen terjadi sebelum onSaveInstanceState dipicu ketika tombol kunci layar ditekan?