Ketika saya mengubah fragmen dan kembali ke yang di awal, menjalankan baris saya mendapatkan kesalahan Fragment tidak dilampirkan ke suatu aktivitas. Aneh karena sebelum saya sampai ke baris ini, saya menggunakan requireAcitivity() dan berfungsi dengan baik. Kesalahan muncul setelah memanggil kustom ArrayAdapter

Ketika saya memanggil arrayadapter, metode requiredActivity masih berfungsi:

val adapter = ListUserGameInfoAdapter(requireContext(), gameViewModel!!)
gameInfoListUsers.adapter = adapter

Setiap baris daftar yang dibuat oleh arrayAdapter memiliki tombol.

icon.setOnClickListener {
     gameViewModel.userToDeleteFromGamePositionLiveData.value = position
}

Tombol mengubah nilai LiveData dari viewModel. Dengan menggunakan pengamat, saya mengambil nilai baru dari LiveData ini. Di dalam kode pengamat, jika saya memanggil requiredActivity(), kesalahan berikut muncul:

        val userToDeleteObserver = Observer<Int> {
            if (it != null) {

                //If I call requiredActivity here, I get the error Fragment not attached to an activity

                showDialog(it)
            }
        }
        gameViewModel!!.userToDeleteFromGamePositionLiveData.observe(
            requireActivity(),
            userToDeleteObserver
        )

Yang aneh adalah pertama kali saya memasukkan fragmen ini kesalahan tidak muncul, hanya ketika saya pergi ke yang lain dan kembali ke yang ini.

0
Chema 6 April 2021, 03:30

1 menjawab

Jawaban Terbaik

Anda menambahkan pengamat di fragmen Anda, tetapi mengikatnya ke siklus hidup aktivitas Anda. Oleh karena itu ia akan terus mengamati perubahan bahkan ketika fragmen telah dihancurkan, itulah sebabnya Anda mendapatkan error saat memanggil requireActivity() di pengamat Anda.

Jika Anda melakukan beberapa debug, Anda mungkin akan melihat bahwa pengamat sebenarnya memicu dua kali, sekali untuk fragmen lama (tidak lagi dilampirkan ke aktivitas) dan sekali untuk fragmen baru.

Anda harus menggunakan Fragment.getViewLifecycleOwner() sebagai gantinya.

1
Henry Twist 6 April 2021, 01:15