Safe Args

Hedefler arasında gezinmek için önerilen yöntem Safe Args Gradle eklentisini kullanmaktır. Bu eklenti, hedefler arasında tür güvenli gezinmeyi sağlayan nesne ve oluşturucu sınıfları oluşturur. Hedefler arasında gezinmek ve veri aktarmak için Safe Args'ı kullanın.

Safe Args'ı etkinleştirme

Projenize Safe Args'ı eklemek için üst düzey build.gradle dosyanıza aşağıdaki classpath öğesini ekleyin:

Groovy

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

Kotlin

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

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

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

Groovy

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:

Groovy

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

Kotlin

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

AndroidX'e taşıma işlemine göre gradle.properties dosyanızda android.useAndroidX=true olmalıdır.

Oluşturulan kod

Safe Args'ı etkinleştirdikten sonra, oluşturulan kodunuzda tanımladığınız her işlem için sınıflar ve yöntemler ile her gönderme ve alma hedefiyle eşleşen sınıflar bulunur.

Safe Args, bir işlemin başladığı her hedef için bir sınıf oluşturur. Oluşturulan sınıf adı, kaynak hedef sınıf adına "Directions" (Yol Tarifleri) ifadesini ekler. Örneğin, kaynak hedef SpecifyAmountFragment olarak adlandırılmışsa oluşturulan sınıf SpecifyAmountFragmentDirections olarak adlandırılır.

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.

Safe Args örneği

Örneğin, iki hedefi (SpecifyAmountFragment ve ConfirmationFragment) bağlayan tek bir işleme sahip bir gezinme grafiği düşünün. ConfirmationFragment, işlem kapsamında sağladığınız tek bir float parametresini alır.

Safe Args, tek bir yöntemi (actionSpecifyAmountFragmentToConfirmationFragment()) ve ActionSpecifyAmountFragmentToConfirmationFragment adlı bir iç sınıfı olan bir SpecifyAmountFragmentDirections sınıfı oluşturur. İç sınıf, NavDirections öğesinden türetilir ve ilişkili işlem kimliğini ve float parametresini depolar. Döndürülen NavDirections nesnesi, aşağıdaki örnekte gösterildiği gibi doğrudan navigate()'ye iletilebilir:

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);
}

Safe Args ile hedefler arasında veri aktarma hakkında daha fazla bilgi için Use Safe Args to pass data with type safety (Verileri tür güvenliğiyle aktarmak için Safe Args'ı kullanma) başlıklı makaleyi inceleyin.

Safe Args kullanarak tür güvenliğini sağlama

Safe Args Gradle eklentisini kullanarak hedefler arasında gezinme. Bu eklenti, hedefler arasında tip güvenliği sağlayan gezinme ve bağımsız değişken iletme olanağı sağlayan basit nesne ve oluşturucu sınıfları oluşturur.

Projenize Safe Args'ı eklemek için üst düzey build.gradle dosyanıza aşağıdaki classpath öğesini ekleyin:

Groovy

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

Kotlin

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

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

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

Groovy

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:

Groovy

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

Kotlin

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

AndroidX'e taşıma işlemine göre gradle.properties dosyanızda android.useAndroidX=true olmalıdır.

Safe Args'ı 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şlem için başlangıç hedefi olan ve işlemin başladığı hedefi temsil eden bir sınıf da oluşturur. Oluşturulan sınıf adı, kaynak hedef sınıf adı ile "Directions" kelimesinin birleşimidir. Örneğin, hedef SpecifyAmountFragment olarak adlandırılmışsa oluşturulan sınıf SpecifyAmountFragmentDirections olarak adlandırılır. 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 navigate()'ye iletebileceğiniz bir NavDirections nesnesi döndürür.

Örneğin, başlangıç hedefi SpecifyAmountFragment ile alıcı hedef ConfirmationFragment arasında bağlantı kuran tek bir işlemin bulunduğu bir gezinme grafiğimiz olduğunu varsayalım.

Safe Args, tek bir yöntemi olan SpecifyAmountFragmentDirections sınıfı oluşturur. Bu yöntem, NavDirections nesnesi döndüren actionSpecifyAmountFragmentToConfirmationFragment() yöntemidir. Döndürülen bu NavDirections nesnesi, aşağıdaki örnekte gösterildiği gibi doğrudan navigate()'ye 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);
}

Hedefler arasında Safe Args ile veri aktarma hakkında daha fazla bilgi için Hedefler arasında veri aktarma bölümündeki Verileri tip güvenliğiyle aktarmak için Safe Args kullanma başlıklı makaleye bakın.