Saya mengikuti pola MVVM - artinya saya memiliki ViewModel untuk setiap Fragmen.
Saya menambahkan dua tab dengan menggunakan ViewPager2.
Adaptor saya terlihat seperti ini:
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return new MergedItemsFragment();
case 1:
return new ValidatedMergedItemsFragment();
}
return new MergedItemsFragment();
}
Tab berfungsi. Namun, saya perhatikan bahwa ViewModel dari MergedItemsFragment saya berperilaku aneh. Sebelum saya menambahkan tab, saya menavigasi ke Fragmen seperti ini:
NavHostFragment.findNavController(this).navigate(R.id.action_roomFragment_to_itemsFragment);
Ketika saya meninggalkan fragmen itu NavHostFragment.findNavController(this).popBackStack()
dan kemudian kembali ke fragmen itu, saya akan mendapatkan ViewModel kosong baru. Ini dimaksudkan.
Dengan pendekatan baru saya menavigasi return new MergedItemsFragment()
. Ketika saya meninggalkan fragmen itu dan kemudian kembali saya mendapatkan ViewModel yang berisi data lama . Itu adalah masalah karena data lama tidak relevan lagi karena Pengguna memilih data yang berbeda di fragmen lain.
Perbarui # 1
Saya menyadari bahwa dia benar-benar menyimpan semua Fragmen lama di memori karena pernyataan cetak yang sama dipanggil beberapa kali. Waktu yang disebut meningkat dengan jumlah kali saya pergi dan kembali ke layar itu. Jadi jika saya pergi dan kembali 10 kali dan memutar perangkat saya dia benar-benar akan mengeksekusi satu baris 10 kali. Adakah tebakan bagaimana menerapkan Tab / ViewPagers dengan Komponen Navigasi dengan cara yang bekerja dengan ViewModels?
Perbarui # 2
Saya mengatur ViewModels saya seperti ini:
viewModel = new ViewModelProvider(this, providerFactory).get(MergedItemViewModel.class)
Saya mendapatkan hasil yang sama dengan:
viewModel = ViewModelProviders.of(this).get(MergedItemViewModel.class);
Saya mengikat ViewModel dalam Fragmen itu sendiri. Karena itu, this
adalah Fragmen.