Safe Args

Hedefler arasında gezinmenin önerilen yolu Safe Args Gradle eklentisini kullanmaktır. Bu eklenti, hedefler arasında tür açısından güvenli gezinmeyi sağlayan nesne ve derleyici sınıfları oluşturur. Hedefler arasında veri aktarmak ve gezinmek için Güvenli Değişkenler'i kullanın.

Güvenli Arg'ları etkinleştir

Güvenli Aramalar'ı projenize eklemek için üst düzey build.gradle dosyanıza aşağıdaki classpath öğesini ekleyin:

Modern

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.7.7"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.7.7"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

Ayrıca, mevcut iki eklentiden birini uygulamanız gerekir.

Java'ya veya karma Java ve Kotlin modüllerine uygun Java dili kodu oluşturmak için şu satırı uygulamanızın veya modülünüzün build.gradle dosyasına ekleyin:

Modern

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

Alternatif olarak, yalnızca Kotlin modüllerine uygun Kotlin kodu oluşturmak için şunu ekleyin:

Modern

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

AndroidX'e Taşıma uyarınca gradle.properties dosyanızda android.useAndroidX=true bulunmalıdır.

Oluşturulan kod

Güvenli Anahtarlar'ı etkinleştirdikten sonra, oluşturulan kodunuz, tanımladığınız her işlem için sınıf ve yöntemlerin yanı sıra her bir gönderme ve alma hedefine karşılık gelen sınıfları içerir.

Güvenli Args, bir işlemin kaynaklandığı her hedef için bir sınıf oluşturur. Oluşturulan sınıf adı, kaynak hedef sınıf adına "Yol Tarifi" ekler. Örneğin, kaynak hedefin adı SpecifyAmountFragment ise oluşturulan sınıfın adı SpecifyAmountFragmentDirections olur.

Oluşturulan sınıf, kaynak hedefte tanımlanan her işlem için statik bir yöntem içerir. Bu yöntem, tanımlanmış tüm işlem parametrelerini bağımsız değişken olarak alır ve doğrudan navigate() öğesine iletebileceğiniz bir NavDirections nesnesi döndürür.

Güvenli Args örneği

Örneğin, SpecifyAmountFragment ve ConfirmationFragment olmak üzere iki hedefi birbirine bağlayan tek bir işlem içeren bir gezinme grafiği ele alalım. ConfirmationFragment, işlem kapsamında sağladığınız tek bir float parametresini alır.

Güvenli Args, tek bir yöntem (actionSpecifyAmountFragmentToConfirmationFragment()) ve ActionSpecifyAmountFragmentToConfirmationFragment adlı bir iç sınıf ile bir SpecifyAmountFragmentDirections sınıfı oluşturur. İç sınıf, NavDirections parametresinden türetilir ve ilişkili işlem kimliği ile float parametresini depolar. Döndürülen NavDirections nesnesi, daha sonra aşağıdaki örnekte gösterildiği gibi doğrudan navigate() öğesine geçirilebilir:

Kotlin

override fun onClick(v: View) {
    val amount: Float = ...
    val action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment(amount)
    v.findNavController().navigate(action)
}

Java

@Override
public void onClick(View view) {
    float amount = ...;
    action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment(amount);
    Navigation.findNavController(view).navigate(action);
}

Güvenli Arg'ları kullanarak hedefler arasında veri geçirme hakkında daha fazla bilgi için Tür güvenliği ile veri aktarmak için Güvenli Arg'ları kullanma bölümüne bakın.

Güvenli Aramalar kullanarak tür güvenliğini sağlayın

Safe Args Gradle eklentisini kullanarak hedefler arasında gezinin. Bu eklenti, tür güvenli gezinme ve hedefler arasında bağımsız değişken aktarımı sağlayan basit nesne ve derleyici sınıfları oluşturur.

Güvenli Aramalar'ı projenize eklemek için üst düzey build.gradle dosyanıza aşağıdaki classpath öğesini ekleyin:

Modern

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.7.7"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.7.7"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

Ayrıca, mevcut iki eklentiden birini uygulamanız gerekir.

Java'ya veya karma Java ve Kotlin modüllerine uygun Java dili kodu oluşturmak için şu satırı uygulamanızın veya modülünüzün build.gradle dosyasına ekleyin:

Modern

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

Alternatif olarak, yalnızca Kotlin modüllerine uygun Kotlin kodu oluşturmak için şunu ekleyin:

Modern

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

AndroidX'e Taşıma uyarınca gradle.properties dosyanızda android.useAndroidX=true bulunmalıdır.

Güvenli Arg'ları etkinleştirdikten sonra eklenti, tanımladığınız her işlem için sınıflar ve yöntemler içeren kod oluşturur. Safe Args, her işlemde işlemin kaynaklandığı hedef olan her kaynak hedef için bir sınıf da oluşturur. Oluşturulan sınıf adı, kaynak hedef sınıf adı ile "Yol Tarifi" kelimesinin birleşimidir. Örneğin, hedefe SpecifyAmountFragment adı verilirse oluşturulan sınıfın adı SpecifyAmountFragmentDirections olur. Oluşturulan sınıf, kaynak hedefte tanımlanan her işlem için statik bir yöntem içerir. Bu yöntem, tanımlı tüm işlem parametrelerini bağımsız değişken olarak alır ve navigate() işlevine iletebileceğiniz bir NavDirections nesnesi döndürür.

Örneğin, SpecifyAmountFragment kaynak hedefini bir alıcı hedefine (ConfirmationFragment) bağlayan tek bir işlem içeren bir gezinme grafiğimiz olduğunu varsayalım.

Güvenli Aramalar, tek bir yöntem olan actionSpecifyAmountFragmentToConfirmationFragment() ile bir SpecifyAmountFragmentDirections sınıfı oluşturur. Bu yöntem, NavDirections nesnesi döndürür. Bu döndürülen NavDirections nesnesi, daha sonra aşağıdaki örnekte gösterildiği gibi doğrudan navigate() öğesine iletilebilir:

Kotlin

override fun onClick(view: View) {
    val action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment()
    view.findNavController().navigate(action)
}

Java

@Override
public void onClick(View view) {
    NavDirections action =
        SpecifyAmountFragmentDirections
            .actionSpecifyAmountFragmentToConfirmationFragment();
    Navigation.findNavController(view).navigate(action);
}

Güvenli Arg'ları kullanarak hedefler arasında veri geçirme hakkında daha fazla bilgi için Hedefler arasında veri iletme bölümündeki Tür güvenliği ile veri aktarmak için Güvenli Arg'ları kullanma bölümüne bakın.