Seçeneklerle gezin

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.