Android

Parça etiketini FragmentContainerView ile değiştirin Çalışma Zamanı Hatasına Neden Oluyor

Ana aktivite düzeni xml dosyanızda tanımlanmış bir parçanız var.

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph" />

Android stüdyosu size aşağıdaki uyarıyı veriyor.

Etiketi FragmentContainerView ile değiştirin.

Öneriyi takip edin ve değiştirin androidx.fragment.app.FragmentContainerView

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph" />

Ardından, projeyi başarıyla oluşturabilirsiniz. Ancak, çalıştırdığınızda, uygulamanız aşağıdaki çalışma zamanı hatasıyla çöküyor.

replace_with_fragment_container_view_02.PNG

Nedeni: Java.lang.IllegalStateException: Activity com.udacity.shoestore.ui.MainActivity@f2c4e66 androidx.navigation.Navigation.findNavController(Navigation.java:61) adresinde 2131362101’de ayarlanmış bir NavController’a sahip değil

Çözüm

findNavController() artık aktivite sınıfınızda çalışmıyor. Kullanarak önce parçayı bulmanız gerekir. supportFragmentManager.findFragmentById() Navigasyon denetleyicisine erişmek için

Önceki

private val navController by lazy {
    findNavController(R.id.nav_host_fragment)
}

Sonrasında

private val navController by lazy {
    val navHostFragment = supportFragmentManager
        .findFragmentById(R.id.nav_host_fragment) as NavHostFragment

    navHostFragment.navController
}

Çözüm

neden olduğundan tam olarak emin değilim FragmentContainerView belgeleri okuduktan sonra bile kullanılmalıdır. Şahsen, kullanıcı açısından, kullanmayı tercih ederim <fragment> etiketi, çünkü gezinme denetleyicisini bulmak için daha az kod kullanır. Uygulama ayrıca onunla mükemmel bir şekilde çalışır!

Ayrıca, Android Studio’nun varsayılan şablon projesi KULLANILMAZ <androidx.fragment.app.FragmentContainerView> önerilen yol buysa hangisi olmalı?

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu