ভিউমডেল স্কোপিং এপিআই (ভিউ) অ্যান্ড্রয়েড জেটপ্যাকের একটি অংশ।
ধারণা এবং জেটপ্যাক কম্পোজ বাস্তবায়ন
ViewModel কার্যকরভাবে ব্যবহার করার জন্য স্কোপ অত্যন্ত গুরুত্বপূর্ণ। প্রতিটি ViewModel এমন একটি অবজেক্টের স্কোপের মধ্যে থাকে যা ViewModelStoreOwner ইন্টারফেসটি ইমপ্লিমেন্ট করে। এমন বেশ কিছু API রয়েছে যা আপনাকে আপনার ViewModel-গুলোর স্কোপ আরও সহজে পরিচালনা করতে সাহায্য করে।
ViewModelProvider.get() মেথডটি আপনাকে যেকোনো ViewModelStoreOwner স্কোপে থাকা একটি ViewModel-এর ইনস্ট্যান্স পেতে সাহায্য করে। কোটলিন ব্যবহারকারীদের জন্য, সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রগুলোর জন্য বিভিন্ন এক্সটেনশন ফাংশন উপলব্ধ রয়েছে। সমস্ত কোটলিন এক্সটেনশন ফাংশন ইমপ্লিমেন্টেশন অভ্যন্তরীণভাবে ViewModelProvider API ব্যবহার করে।
নিকটতম ViewModelStoreOwner-এর স্কোপে থাকা ViewModel-গুলো
আপনি একটি ViewModel-কে কোনো Activity, Fragment, বা Navigation গ্রাফের গন্তব্যের মধ্যে সীমাবদ্ধ করতে পারেন। Activity, Fragment, এবং Navigation লাইব্রেরি দ্বারা প্রদত্ত viewModels() এক্সটেনশন ফাংশনগুলো আপনাকে নিকটতম ViewModelStoreOwner মধ্যে সীমাবদ্ধ ViewModel-এর একটি ইনস্ট্যান্স পেতে সাহায্য করে।
মতামত
import androidx.activity.viewModels class MyActivity : AppCompatActivity() { // ViewModel API available in activity.activity-ktx // The ViewModel is scoped to `this` Activity val viewModel: MyViewModel by viewModels() } import androidx.fragment.app.viewModels class MyFragment : Fragment() { // ViewModel API available in fragment.fragment-ktx // The ViewModel is scoped to `this` Fragment val viewModel: MyViewModel by viewModels() }
মতামত
import androidx.lifecycle.ViewModelProvider; public class MyActivity extends AppCompatActivity { // The ViewModel is scoped to `this` Activity MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class); } public class MyFragment extends Fragment { // The ViewModel is scoped to `this` Fragment MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class); }
যেকোনো ViewModelStoreOwner-এর আওতাভুক্ত ViewModel-সমূহ
ভিউ সিস্টেমের ComponentActivity.viewModels() এবং Fragment.viewModels() ফাংশনগুলো একটি ঐচ্ছিক ownerProducer প্যারামিটার গ্রহণ করে, যা ব্যবহার করে আপনি নির্দিষ্ট করতে পারেন যে ViewModel-এর ইনস্ট্যান্সটি কোন ViewModelStoreOwner এর স্কোপভুক্ত। নিম্নলিখিত নমুনাটি দেখায় কিভাবে প্যারেন্ট ফ্র্যাগমেন্টের স্কোপভুক্ত একটি ViewModel-এর ইনস্ট্যান্স পাওয়া যায়:
মতামত
import androidx.fragment.app.viewModels class MyFragment : Fragment() { // ViewModel API available in fragment.fragment-ktx // The ViewModel is scoped to the parent of `this` Fragment val viewModel: SharedViewModel by viewModels( ownerProducer = { requireParentFragment() } ) }
মতামত
import androidx.lifecycle.ViewModelProvider; public class MyFragment extends Fragment { SharedViewModel viewModel; @Override public void onViewCreated(View view, Bundle savedInstanceState) { // The ViewModel is scoped to the parent of `this` Fragment viewModel = new ViewModelProvider(requireParentFragment()) .get(SharedViewModel.class); } }
একটি Fragment থেকে Activity-scoped ViewModel পাওয়া একটি সাধারণ ব্যবহার। এটি করার জন্য, আপনি activityViewModels() Views এক্সটেনশন ফাংশনটি ব্যবহার করতে পারেন। যদি আপনি Views এবং Kotlin ব্যবহার না করেন, তাহলে আপনি উপরের API-গুলোই ব্যবহার করতে পারেন এবং সঠিক owner পাস করতে পারেন।
মতামত
import androidx.fragment.app.activityViewModels class MyFragment : Fragment() { // ViewModel API available in fragment.fragment-ktx // The ViewModel is scoped to the host Activity val viewModel: SharedViewModel by activityViewModels() }
মতামত
import androidx.lifecycle.ViewModelProvider; public class MyFragment extends Fragment { SharedViewModel viewModel; @Override public void onViewCreated(View view, Bundle savedInstanceState) { // The ViewModel is scoped to the host Activity viewModel = new ViewModelProvider(requireActivity()) .get(SharedViewModel.class); } }
নেভিগেশন গ্রাফের আওতাভুক্ত ভিউমডেলগুলি
ন্যাভিগেশন গ্রাফগুলোও ViewModel স্টোর ওনার। আপনি যদি ন্যাভিগেশন ফ্র্যাগমেন্ট ব্যবহার করেন, navGraphViewModels(graphId) Views এক্সটেনশন ফাংশনটির মাধ্যমে একটি ন্যাভিগেশন গ্রাফের স্কোপে থাকা ViewModel-এর ইনস্ট্যান্স পেতে পারেন।
মতামত
import androidx.navigation.navGraphViewModels class MyFragment : Fragment() { // ViewModel API available in navigation.navigation-fragment // The ViewModel is scoped to the `nav_graph` Navigation graph val viewModel: SharedViewModel by navGraphViewModels(R.id.nav_graph) // Equivalent navGraphViewModels code using the viewModels API val viewModel: SharedViewModel by viewModels( { findNavController().getBackStackEntry(R.id.nav_graph) } ) }
মতামত
import androidx.lifecycle.ViewModelProvider; public class MyFragment extends Fragment { SharedViewModel viewModel; @Override public void onViewCreated(View view, Bundle savedInstanceState) { NavController navController = NavHostFragment.findNavController(this); NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.my_graph); // The ViewModel is scoped to the `nav_graph` Navigation graph viewModel = new ViewModelProvider(backStackEntry).get(SharedViewModel.class); } }
আপনি যদি Jetpack Navigation-এর পাশাপাশি Hilt-ও ব্যবহার করেন, তাহলে আপনি hiltNavGraphViewModels(graphId) API-টি নিম্নোক্তভাবে ব্যবহার করতে পারেন।
মতামত
import androidx.hilt.navigation.fragment.hiltNavGraphViewModels class MyFragment : Fragment() { // ViewModel API available in hilt.hilt-navigation-fragment // The ViewModel is scoped to the `nav_graph` Navigation graph // and is provided using the Hilt-generated ViewModel factory val viewModel: SharedViewModel by hiltNavGraphViewModels(R.id.nav_graph) }
মতামত
import androidx.hilt.navigation.HiltViewModelFactory; import androidx.lifecycle.ViewModelProvider; public class MyFragment extends Fragment { SharedViewModel viewModel; @Override public void onViewCreated(View view, Bundle savedInstanceState) { NavController navController = NavHostFragment.findNavController(this); NavBackStackEntry backStackEntry = navController.getBackStackEntry(R.id.my_graph); // The ViewModel is scoped to the `nav_graph` Navigation graph // and is provided using the Hilt-generated ViewModel factory viewModel = new ViewModelProvider( backStackEntry, HiltViewModelFactory.create(getContext(), backStackEntry) ).get(SharedViewModel.class); } }
আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলেও লিঙ্কের লেখা প্রদর্শিত হয়।
- লেআউট এবং বাইন্ডিং এক্সপ্রেশন
- ভিউমডেলের সংক্ষিপ্ত বিবরণ
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2026-04-30 UTC-তে শেষবার আপডেট করা হয়েছে।