Определение NavHostFragment внутри другого фрагмента - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть фрагмент, который я определяю в нем NavHostFragment следующим образом:

<fragment
        android:id="@+id/shipping_host_nav"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/shipping_nav_graph"
        app:defaultNavHost="true"/>

при попытке вызвать метод findNavController во фрагменте, он выдал исключение недопустимого состояния и говорит, что моя группа представлений неесть NavController.

    java.lang.IllegalStateException: View androidx.core.widget.NestedScrollView{1dd5506 VFED..... ......I. 0,0-0,0} does not have a NavController set

Итак, мой вопрос: можно ли определить фрагмент NavHostFragment внутри другого фрагмента? или подходит только для занятий? Я много искал, чтобы найти, могу ли я определить фрагмент хоста навигации внутри другого фрагмента, но я не нашел ответов.

1 Ответ

2 голосов
/ 07 ноября 2019

Я нашел решение для этого исключения, findNavController () выдает это исключение при попытке вызвать этот метод внутри фрагмента, который не является NavHostFragment или не находится внутри NavHostFragment, поэтому я сделал эту ошибку, вызвав этот метод в своем фрагменте. Поэтому я должен найти контроллер самостоятельно, используя класс навигации

Navigation.findNavController(activity, R.id.my_nav_host_fragment)

, вот как найти NavHostFragment (NavController), определенный внутри фрагмента

Я сделал функцию расширения для класса Fragment, чтобы мне было легко найти навигационный контроллер, используя id

fun Fragment.getFragmentNavController(@IdRes id: Int) = activity?.let {
    return@let Navigation.findNavController(it, id)
}
...