নিম্নলিখিত বিভাগগুলি আপনার ব্যাক স্ট্যাক সংরক্ষণ এবং আপনার ব্যাক স্ট্যাকের এন্ট্রিগুলির সাথে সম্পর্কিত অবস্থা সংরক্ষণ করার কৌশলগুলি বর্ণনা করে৷
আপনার পিছনে স্ট্যাক সংরক্ষণ করুন
কনফিগারেশন পরিবর্তন এবং প্রক্রিয়া মৃত্যু সহ বিভিন্ন জীবনচক্র ইভেন্ট জুড়ে আপনার অ্যাপের নেভিগেশন অবস্থা বজায় থাকে তা নিশ্চিত করা একটি ভাল ব্যবহারকারীর অভিজ্ঞতার জন্য অত্যন্ত গুরুত্বপূর্ণ। নেভিগেশন 3-এ, আপনি আপনার ব্যাক স্ট্যাকের মালিক, তাই আপনি কীভাবে এটি তৈরি করবেন বা সংরক্ষণ করবেন সে বিষয়ে কঠোর নির্দেশিকা নেই। যাইহোক, নেভিগেশন 3 একটি সুবিধার পদ্ধতি অফার করে যা আপনাকে একটি সংরক্ষণযোগ্য ব্যাক স্ট্যাক প্রদান করে: rememberNavBackStack
।
rememberNavBackStack
ব্যবহার করুন
rememberNavBackStack
কম্পোজেবল ফাংশনটি একটি ব্যাক স্ট্যাক তৈরি করার জন্য ডিজাইন করা হয়েছে যা কনফিগারেশন পরিবর্তন এবং প্রক্রিয়া মৃত্যু জুড়ে অব্যাহত থাকে।
rememberNavBackStack
জন্যNavBackStack সঠিকভাবে কাজ করতে, আপনার ব্যাক স্ট্যাকের প্রতিটি কী নির্দিষ্ট প্রয়োজনীয়তা মেনে চলতে হবে:
-
NavKey
ইন্টারফেস প্রয়োগ করুন : ব্যাক স্ট্যাকের প্রতিটি কীকে অবশ্যইNavKey
ইন্টারফেস প্রয়োগ করতে হবে। এটি একটি মার্কার ইন্টারফেস হিসাবে কাজ করে যা লাইব্রেরিতে সংকেত দেয় যে কীটি সংরক্ষণ করা যেতে পারে। -
@Serializable
টীকা রাখুন :NavKey
প্রয়োগ করার পাশাপাশি, আপনার মূল ক্লাস এবং অবজেক্টগুলিকে@Serializable
টীকা দিয়ে চিহ্নিত করতে হবে।
নিম্নলিখিত স্নিপেটটি rememberNavBackStack
সঠিক বাস্তবায়ন দেখায়:
@Serializable data object Home : NavKey @Composable fun NavBackStack() { val backStack = rememberNavBackStack(Home) }
বিকল্প: একটি ViewModel
সংরক্ষণ করা
আপনার ব্যাক স্ট্যাক পরিচালনা করার আরেকটি পদ্ধতি হল এটি একটি ViewModel
এ সংরক্ষণ করা। একটি ViewModel
বা অন্য কোন কাস্টম স্টোরেজ ব্যবহার করার সময় প্রক্রিয়া মৃত্যুর মাধ্যমে স্থির থাকার জন্য, আপনাকে এটি করতে হবে:
- নিশ্চিত করুন যে আপনার কীগুলি সিরিয়ালাইজযোগ্য : ঠিক
rememberNavBackStack
এর মতো, আপনার নেভিগেশন কীগুলি অবশ্যই সিরিয়ালাইজযোগ্য হতে হবে। - ম্যানুয়ালি সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন পরিচালনা করুন : যখন আপনার অ্যাপটি ব্যাকগ্রাউন্ডে যাচ্ছে বা পুনরুদ্ধার করা হচ্ছে তখন আপনি ম্যানুয়ালি প্রতিটি কী-এর সিরিয়ালাইজড উপস্থাপনা সংরক্ষণ করতে এবং ক্রমাগত স্টোরেজ (যেমন,
SharedPreferences
, একটি ডাটাবেস বা একটি ফাইল) থেকে ডিসিরিয়ালাইজ করার জন্য দায়ী৷
স্কোপিং ViewModel
s থেকে NavEntry
s
ViewModels
কনফিগারেশন পরিবর্তন জুড়ে UI- সম্পর্কিত অবস্থা ধরে রাখতে ব্যবহার করা হয়, যেমন স্ক্রীন ঘূর্ণন। ডিফল্টরূপে, ViewModels
নিকটতম ViewModelStoreOwner
কাছে স্কোপ করা হয়, যা সাধারণত আপনার Activity
বা Fragment
।
যাইহোক, আপনি পুরো Activity
পরিবর্তে ব্যাক স্ট্যাকের একটি নির্দিষ্ট NavEntry
(যেমন, একটি নির্দিষ্ট স্ক্রীন বা গন্তব্য) একটি ViewModel
স্কোপ করতে চাইতে পারেন। এটি নিশ্চিত করে যে ViewModel
এর অবস্থা শুধুমাত্র তখনই বজায় থাকবে যখন সেই নির্দিষ্ট NavEntry
ব্যাক স্ট্যাকের অংশ হবে, এবং যখন NavEntry
পপ করা হবে তখন সাফ করা হবে।
androidx.lifecycle:lifecycle-viewmodel-navigation3
অ্যাড-অন লাইব্রেরি একটি NavEntryDecorator
প্রদান করে যা এটিকে সহজতর করে। এই ডেকোরেটর প্রতিটি NavEntry
জন্য একটি ViewModelStoreOwner
প্রদান করে। আপনি যখন একটি NavEntry
এর বিষয়বস্তুর মধ্যে একটি ViewModel
তৈরি করেন (যেমন, কম্পোজে viewModel()
ব্যবহার করে), তখন এটি স্বয়ংক্রিয়ভাবে ব্যাক স্ট্যাকের সেই নির্দিষ্ট NavEntry
এর কী-তে স্কোপ করা হয়। এর মানে হল যখন NavEntry
ব্যাক স্ট্যাকে যোগ করা হয় তখন ViewModel
তৈরি হয় এবং এটি সরানো হলে সাফ করা হয়।
ViewModel
s থেকে NavEntry
s স্কোপ করার জন্য NavEntryDecorator
ব্যবহার করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- আপনার
app/build.gradle.kts
ফাইলেandroidx.lifecycle:lifecycle-viewmodel-navigation3
নির্ভরতা যোগ করুন। - একটি
NavDisplay
নির্মাণ করার সময়entryDecorators
তালিকায়rememberSavedStateNavEntryDecorator()
যোগ করুন। - আপনার
NavDisplay
এ অন্যান্য ডেকোরেটর যোগ করুন।
NavDisplay( entryDecorators = listOf( // Add the default decorators for managing scenes and saving state rememberSceneSetupNavEntryDecorator(), rememberSavedStateNavEntryDecorator(), // Then add the view model store decorator rememberViewModelStoreNavEntryDecorator() ), backStack = backStack, entryProvider = entryProvider { }, )