Ben MVVM desen takip ediyorum - yani her Parça için bir ViewModel var.
ViewPager2'yi kullanarak iki sekme ekledim .
Adaptörüm şöyle:
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return new MergedItemsFragment();
case 1:
return new ValidatedMergedItemsFragment();
}
return new MergedItemsFragment();
}
Sekmeler çalışıyor. Ancak, benim MergedItemsFragment ViewModel garip davranıyor fark ettim. Sekme eklemeden önce Fragment'e şu şekilde gittim:
NavHostFragment.findNavController(this).navigate(R.id.action_roomFragment_to_itemsFragment);
Bu parçayı bırakıp NavHostFragment.findNavController(this).popBackStack()daha sonra bu parçasına döndüğümde yeni bir boş ViewModel alırdım. Bu amaçlanmıştı.
Yeni yaklaşımla birlikte ilerliyorum return new MergedItemsFragment(). Bu parçayı bıraktığımda ve daha sonra geri döndüğümde eski verileri içeren bir ViewModel alıyorum . Bu, Kullanıcı başka bir parçada farklı veriler seçtiği için eski verilerin artık alakalı olmadığı için bir sorundur.
Güncelleme # 1
Aslında tüm eski Fragmanları hafızada tuttuğunu fark ettim çünkü aynı baskı ifadeleri birden çok kez çağrılır. Adı verilen süreler, o ekrana gitme ve geri dönme süremle birlikte artar. Bu yüzden 10 kez ayrılıp geri dönersem ve cihazımı döndürürsem, aslında 10 kez bir satır yürütür. Herhangi bir sekme / ViewPagers Gezinti Bileşenleri ile ViewModels ile çalışan bir şekilde nasıl uygulanacağını tahmin?
Güncelleme # 2
ViewModels'ımı şöyle ayarladım:
viewModel = new ViewModelProvider(this, providerFactory).get(MergedItemViewModel.class)
İle aynı sonuçları elde:
viewModel = ViewModelProviders.of(this).get(MergedItemViewModel.class);
ViewModel'i Fragment'ın kendisine bağlarım. Bu nedenle, thisParçadır.