ฉันกำลังติดตามรูปแบบ MVVM - หมายถึงฉันมี ViewModel สำหรับแต่ละส่วน
ฉันเพิ่มสองแท็บโดยใช้ ViewPager2
อะแดปเตอร์ของฉันมีลักษณะเช่นนี้:
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return new MergedItemsFragment();
case 1:
return new ValidatedMergedItemsFragment();
}
return new MergedItemsFragment();
}
แท็บกำลังทำงาน อย่างไรก็ตามฉันสังเกตเห็นว่า ViewModel ของ MergedItemsFragment ของฉันทำงานผิดปกติ ก่อนที่ฉันจะเพิ่มแท็บฉันไปที่ Fragment เช่นนี้:
NavHostFragment.findNavController(this).navigate(R.id.action_roomFragment_to_itemsFragment);
เมื่อฉันออกจากส่วนนั้นด้วยNavHostFragment.findNavController(this).popBackStack()
และหลังจากนั้นกลับสู่ชิ้นส่วนนั้นฉันจะได้รับ ViewModel ที่ว่างเปล่าใหม่ นี่ตั้งใจไว้
return new MergedItemsFragment()
ด้วยวิธีการใหม่ฉันกำลังการนำทางด้วย เมื่อฉันออกจากส่วนที่และต่อมาในการกลับมาฉันได้รับ ViewModel ที่มีข้อมูลเก่า นั่นเป็นปัญหาเนื่องจากข้อมูลเก่าไม่เกี่ยวข้องอีกต่อไปเพราะผู้ใช้เลือกข้อมูลที่แตกต่างในส่วนอื่น
อัปเดต # 1
ฉันรู้ว่าจริง ๆ แล้วเขาช่วยให้ทุกเก่าเศษในความทรงจำเพราะงบพิมพ์เดียวกันได้รับการเรียกหลายครั้ง จำนวนครั้งที่เรียกว่าเพิ่มขึ้นตามจำนวนครั้งที่ฉันออกไปและกลับไปที่หน้าจอนั้น ดังนั้นถ้าฉันออกไปและกลับมา 10 ครั้งแล้วหมุนอุปกรณ์ของฉันเขาจะรันหนึ่งบรรทัด 10 ครั้ง มีการเดาว่าจะใช้ Tabs / ViewPagers กับ Navigation Components ในลักษณะที่ทำงานกับ ViewModels ได้อย่างไร?
อัปเดต # 2
ฉันตั้ง ViewModels ของฉันเช่นนี้:
viewModel = new ViewModelProvider(this, providerFactory).get(MergedItemViewModel.class)
ฉันได้รับผลลัพธ์เดียวกันกับ:
viewModel = ViewModelProviders.of(this).get(MergedItemViewModel.class);
ฉันผูก ViewModel ในแฟรกเมนต์เอง ดังนั้นจึงthis
เป็นส่วน