আমি এমভিভিএম প্যাটার্নটি অনুসরণ করছি - যার অর্থ প্রতিটি খণ্ডের জন্য আমার কাছে একটি ভিডমডেল রয়েছে।
আমি ভিউপ্যাজার 2 ব্যবহার করে দুটি ট্যাব যুক্ত করেছি ।
আমার অ্যাডাপ্টারটি দেখতে এমন দেখাচ্ছে:
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return new MergedItemsFragment();
case 1:
return new ValidatedMergedItemsFragment();
}
return new MergedItemsFragment();
}
ট্যাবগুলি কাজ করছে। তবে, আমি লক্ষ্য করেছি যে আমার মার্জডআইটেমফ্র্যাগমেন্টের ভিউমোডেলটি অদ্ভুত আচরণ করছে ving আমি ট্যাবগুলি যুক্ত করার আগে আমি এই জাতীয় খণ্ডটিতে নেভিগেট করেছি:
NavHostFragment.findNavController(this).navigate(R.id.action_roomFragment_to_itemsFragment);
যখন আমি সেই খণ্ডটি ছেড়ে দিয়েছিলাম NavHostFragment.findNavController(this).popBackStack()
এবং পরে সেই টুকরোটিতে ফিরে এসে আমি একটি নতুন খালি ভিউমোডেল পেয়ে যাব। এই উদ্দেশ্য ছিল।
নতুন পদ্ধতির সাথে আমি নেভিগেট করছি return new MergedItemsFragment()
। আমি যখন এই টুকরোটি ছেড়ে দিই এবং পরে ফিরতি সময়ে আমি একটি ভিউমোডেল পাচ্ছি যাতে পুরানো ডেটা রয়েছে । এটি একটি সমস্যা কারণ পুরানো ডেটা আর প্রাসঙ্গিক নয় কারণ ব্যবহারকারী অন্য খণ্ডে বিভিন্ন ডেটা নির্বাচন করেছেন।
আপডেট # 1
আমি বুঝতে পেরেছিলাম যে তিনি আসলে সমস্ত পুরানো টুকরো স্মৃতিতে রেখেছেন কারণ একই মুদ্রণ বিবৃতিগুলি একাধিকবার ডাকে। যে বার এটি বলা হয় তার পরিমাণ বাড়ার সাথে সাথে আমি যে সময় ছেড়ে যাই এবং সেই স্ক্রিনে ফিরে যাই। সুতরাং আমি যদি 10 বার ছেড়ে চলে যাই এবং আমার ডিভাইসটি ঘোরান তবে সে আসলে একটি লাইন 10 বার কার্যকর করবে। কোনও ভিউমোডেলসের সাথে কাজ করে এমনভাবে নেভিগেশন উপাদানগুলির সাথে ট্যাব / ভিউপেজারগুলি কীভাবে প্রয়োগ করা যায় তা অনুমান করে?
আপডেট # 2
আমি আমার ভিউমোডেলগুলি এটির মতো সেট করেছি:
viewModel = new ViewModelProvider(this, providerFactory).get(MergedItemViewModel.class)
আমি একই ফলাফল পেতে:
viewModel = ViewModelProviders.of(this).get(MergedItemViewModel.class);
আমি খণ্ডের মধ্যে ভিউমোডেলকে আবদ্ধ করি। সুতরাং, this
খণ্ডটি হয়।