Kotlin DSL'sini kullanarak gezinme grafiğinde bir işlem tanımladığınızda,
Gezinme, buna karşılık gelen bir NavAction
sınıfı oluşturur. Bu sınıf şunları içerir:
söz konusu işlem için tanımlanan yapılandırmalara (aşağıdakiler dahil) izin ver:
- Hedef: Hedef hedefin kaynak kimliği.
- Varsayılan bağımsız değişkenler: Varsayılan değerleri içeren bir
android.os.Bundle
(belirtilmişse) hedef için - Gezinme seçenekleri: Gezinme seçenekleri
NavOptions
. Bu sınıf, şunun için tüm özel yapılandırmaları içerir: animasyon dahil olmak üzere hedef hedefe geçiş ve hedeften dönüş kaynak yapılandırması, pop davranışı ve hedefin tekli üst modda başlatıldı.
Oluşturma ile ilgili seçenekler
Varsayılan olarak navigate()
, yeni hedefinizi arka gruba ekler. Şunları yapabilirsiniz:
adresine ek gezinme seçenekleri ileterek navigate()
davranışını değiştirin
navigate()
görüşmeniz.
Basit bir lambda kullanarak NavOptions
örneği oluşturabilirsiniz. Pas
navigate()
NavOptions.Builder
. Aşağıdaki örnekleri göz önünde bulundurun:
Örnekler için, seçeneklerin nasıl geçirileceğine ilişkin örnekler için geri yığın kılavuzuna bakın.
bağlam içinde navigate()
olarak değiştirin.
XML ile seçenekler
Aşağıda, bir işlem ve iki ekrandan oluşan örnek bir grafik verilmiştir arasında gezinmeyi sağlar:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/a">
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
android:label="a"
tools:layout="@layout/a">
<action android:id="@+id/action_a_to_b"
app:destination="@id/b"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>
<fragment android:id="@+id/b"
android:name="com.example.myapplication.FragmentB"
android:label="b"
tools:layout="@layout/b">
<action android:id="@+id/action_b_to_a"
app:destination="@id/a"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"
app:popUpTo="@+id/a"
app:popUpToInclusive="true"/>
</fragment>
</navigation>
Gezinme grafiği şişirildiğinde bu işlemler ayrıştırılır ve
karşılık gelen NavAction
nesne, tanımlanan yapılandırmalarla oluşturulur
görebilirsiniz. Örneğin action_b_to_a
,
b
olan varış noktası a
hedefine. Bu işlem, animasyonların yanı sıra
Tüm hedefleri geri yığından kaldıran popTo
davranışı. Bunların tümü
ayarlar NavOptions
olarak yakalanır ve NavAction
öğesine eklenir.
Bu NavAction
yönergesini takip etmek için NavController.navigate()
öğesini kullanarak
bu işlem aşağıdaki örnekte gösterildiği gibidir:
navController.navigate(R.id.action_b_to_a)
Seçenekleri programatik olarak uygulama
Önceki örneklerde, gezinme bölmesinde NavOptions
seçeneğinin nasıl belirtileceği gösterilmektedir
grafiği XML. Ancak kısıtlamalara bağlı olarak belirli seçenekler değişebilir.
emin olun. Bu gibi durumlarda, NavOptions
oluşturulmalı ve ayarlanmalıdır.
programlı şekilde tanımlar:
Kotlin
findNavController().navigate(
R.id.action_fragmentOne_to_fragmentTwo,
null,
navOptions { // Use the Kotlin DSL for building NavOptions
anim {
enter = android.R.animator.fade_in
exit = android.R.animator.fade_out
}
}
)
Java
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(
R.id.action_fragmentOne_to_fragmentTwo,
null,
new NavOptions.Builder()
.setEnterAnim(android.R.animator.fade_in)
.setExitAnim(android.R.animator.fade_out)
.build()
);
Bu örnekte genişletilmiş bir navigate()
biçimi kullanılmaktadır ve ek
Bundle
ve NavOptions
bağımsız değişkenler. navigate()
öğesinin tüm varyantları genişletildi
NavOptions
bağımsız değişkenini kabul eden sürümler.
Örtülü sürüme giderken NavOptions
öğesini programatik olarak da uygulayabilirsiniz.
derin bağlantılar:
Kotlin
findNavController().navigate(
deepLinkUri,
navOptions { // Use the Kotlin DSL for building NavOptions
anim {
enter = android.R.animator.fade_in
exit = android.R.animator.fade_out
}
}
)
Java
NavController navController = NavHostFragment.findNavController(this);
navController.navigate(
deepLinkUri,
new NavOptions.Builder()
.setEnterAnim(android.R.animator.fade_in)
.setExitAnim(android.R.animator.fade_out)
.build()
);
Bu navigate()
varyantı, örtülü derin veri için Uri
alır
bağlantısı ve NavOptions
örneği.