Aşağıdaki bölümlerde, arka yığınınızı kaydetme ve arka yığınınızdaki girişlerle ilişkili durumu depolama stratejileri açıklanmaktadır.
Geri yığınınızı kaydetme
Uygulamanızın gezinme durumunun yapılandırma değişiklikleri ve işlem sonlandırma dahil olmak üzere çeşitli yaşam döngüsü etkinliklerinde devam etmesini sağlamak, iyi bir kullanıcı deneyimi için çok önemlidir. Gezinme 3'te geri yığınınız size aittir. Bu nedenle, geri yığınınızı nasıl oluşturacağınız veya kaydedeceğinizle ilgili katı kurallar yoktur. Ancak Gezinme 3, kaydedilebilir bir geri yığını sağlayan bir kolaylık yöntemi sunar: rememberNavBackStack
.
rememberNavBackStack
hareketini kullanın
rememberNavBackStack
birleştirilebilir işlevi, yapılandırma değişiklikleri ve işlem sonlandırması boyunca devam eden bir yedek yığın oluşturmak için tasarlanmıştır.
rememberNavBackStack
'ün düzgün çalışması için arka yığınınızdaki her anahtar belirli koşullara uymalıdır:
NavKey
arayüzünü uygulayın: Arka yığıntaki her anahtar,NavKey
arayüzünü uygulamalıdır. Bu, anahtarın kaydedilebileceğini kitaplığa bildiren bir işaretçi arayüzü görevi görür.@Serializable
ek açıklamasını ekleyin:NavKey
'ı uygulamanın yanı sıra anahtar sınıflarınız ve nesneleriniz@Serializable
ek açıklamasıyla işaretlenmelidir.
Aşağıdaki snippet'te rememberNavBackStack
öğesinin doğru bir şekilde uygulanması gösterilmektedir:
@Serializable data object Home : NavKey @Composable fun NavBackStack() { val backStack = rememberNavBackStack(Home) }
Alternatif: ViewModel
'te depolama
Geri yığınınızı yönetmenin bir diğer yolu da ViewModel
içinde depolamaktır.
ViewModel
veya başka bir özel depolama alanı kullanırken işlem sonlandırma sırasında devamlılık sağlamak için:
- Anahtarlarınızın serileştirilebilir olduğundan emin olun:
rememberNavBackStack
ile olduğu gibi, gezinme anahtarlarınız da serileştirilebilir olmalıdır. - Serileştirme ve serileştirmeyi manuel olarak işleme: Her anahtarın serileştirilmiş temsilini kalıcı depolamaya manuel olarak kaydetmekten ve kalıcı depolama alanından serileştirmekten siz sorumlusunuz (ör.
SharedPreferences
, veritabanı veya dosya) erişebilir.
ViewModel
saniyelik kapsamı NavEntry
saniyeye genişletme
ViewModels
, ekran döndürme gibi yapılandırma değişikliklerinde kullanıcı arayüzüyle ilgili durumu korumak için kullanılır. Varsayılan olarak ViewModels
, en yakın ViewModelStoreOwner
'a (genellikle Activity
veya Fragment
) göre kapsamlandırılır.
Ancak bir ViewModel
'ü Activity
'nin tamamı yerine arka yığıntaki belirli bir NavEntry
'e (ör. belirli bir ekran veya hedef) göre kapsamını belirlemek isteyebilirsiniz. Bu sayede ViewModel
'ın durumu yalnızca söz konusu NavEntry
arka yığının bir parçasıyken korunur ve NavEntry
pop'lendiğinde temizlenir.
androidx.lifecycle:lifecycle-viewmodel-navigation3
eklenti kitaplığı, bu işlemi kolaylaştıran bir NavEntryDecorator
sağlar. Bu süsleyici, her NavEntry
için bir ViewModelStoreOwner
sağlar. Bir NavEntry
içeriğinin içine ViewModel
oluşturduğunuzda (ör. Oluştur'da viewModel()
kullanarak), bu ViewModel
otomatik olarak arka yığıntaki ilgili NavEntry
anahtarının kapsamına alınır. Bu, NavEntry
arka yığına eklendiğinde ViewModel
'ün oluşturulduğu ve kaldırıldığında temizlendiği anlamına gelir.
ViewModel
'leri NavEntry
'ler için kapsama almak üzere NavEntryDecorator
kullanmak için aşağıdaki adımları uygulayın:
androidx.lifecycle:lifecycle-viewmodel-navigation3
bağımlılığınıapp/build.gradle.kts
dosyanıza ekleyin.NavDisplay
oluştururkenentryDecorators
listesinerememberSavedStateNavEntryDecorator()
ekleyin.NavDisplay
öğenize başka süsleyiciler ekleyin.
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 { }, )