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.
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ı?