MVVM 패턴을 따르고 있습니다. 즉, 각 조각에 대해 ViewModel이 있습니다.
ViewPager2를 사용하여 두 개의 탭을 추가했습니다 .
내 어댑터는 다음과 같습니다
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return new MergedItemsFragment();
case 1:
return new ValidatedMergedItemsFragment();
}
return new MergedItemsFragment();
}
탭이 작동 중입니다. 그러나 MergedItemsFragment의 ViewModel이 이상하게 작동하는 것으로 나타났습니다. 탭을 추가하기 전에 다음과 같이 조각으로 이동했습니다.
NavHostFragment.findNavController(this).navigate(R.id.action_roomFragment_to_itemsFragment);
그 조각을 남겨두고 NavHostFragment.findNavController(this).popBackStack()
나중에 그 조각 으로 돌아 왔을 때 새로운 빈 ViewModel을 얻습니다. 이것은 의도 된 것입니다.
새로운 접근 방식으로 나는 탐색하고 return new MergedItemsFragment()
있습니다. 해당 조각을 남겨두고 나중에 반환 하면 이전 데이터 가 포함 된 ViewModel이 나타납니다 . 사용자가 다른 조각에서 다른 데이터를 선택했기 때문에 이전 데이터는 더 이상 관련이 없기 때문에 문제가됩니다.
업데이트 # 1
나는 동일한 인쇄 문이 여러 번 호출되기 때문에 실제로 모든 이전 조각 을 메모리에 보관한다는 것을 깨달았 습니다. 호출 시간은 내가 떠나서 해당 화면으로 돌아 오는 횟수에 따라 증가합니다. 따라서 내가 10 번 떠났다가 내 장치를 돌리면 실제로 한 줄을 10 번 실행합니다. ViewModels와 작동하는 방식으로 탐색 구성 요소로 탭 / ViewPagers를 구현하는 방법이 있습니까?
업데이트 # 2
ViewModels를 다음과 같이 설정했습니다.
viewModel = new ViewModelProvider(this, providerFactory).get(MergedItemViewModel.class)
나는 같은 결과를 얻는다 :
viewModel = ViewModelProviders.of(this).get(MergedItemViewModel.class);
Fragment 자체에서 ViewModel을 바인딩합니다. 따라서 this
조각입니다.