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 anahtarNavKey
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
saniyeden NavEntry
saniyeye kadar kapsam
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 durumunun yalnızca söz konusu NavEntry
arka yığının bir parçasıyken korunması ve NavEntry
pop edildiğinde temizlenmesi sağlanır.
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çinde ViewModel
oluşturduğunuzda (ör. Oluştur'da viewModel()
'yi kullanarak), otomatik olarak arka yığıntaki söz konusu 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
'lere göre kapsama almak için NavEntryDecorator
'ü kullanmak üzere 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ştururkenrememberSavedStateNavEntryDecorator()
öğesinientryDecorators
listesine 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 { }, )