私はこのように私の中に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"/>
_
fragmentでFindNavControllerメソッドを呼び出しようとすると、それは不正な状態例外をスローし、私のビューグループにNAVコントローラがないと言っています。
Java.lang.IllegalStateException: View androidx.core.widget.NestedScrollView{1dd5506 VFED..... ......I. 0,0-0,0} does not have a NavController set
_
だから私の質問は次のとおりです。別のフラグメントの中でNavhostFragmentを定義できますか?または活動のみに適していますか?私は見つけるために多くのフラグメントの中にNAVホストの断片を定義することができますが、答えが見つかりませんでした。
この例外の解決策を見つけました、findnavcontroller()は、NavhostFragmentではなく、NavhostFragmentの中ではなくこのメソッドを呼び出すことを試みるときにこの例外をスローしてください。
[。ね。だから私はナビゲーションクラスを使って自分でコントローラを見つける必要があります
Navigation.findNavController(activity, R.id.my_nav_Host_fragment)
_
これは、フラグメント内で定義されているNavhostFragment(Nav Controller)を見つける方法です。
フラグメントクラスの拡張機能を作成して、IDを使用してNAVコントローラを簡単に見つけることができます
fun Fragment.getFragmentNavController(@IdRes id: Int) = activity?.let {
return@let Navigation.findNavController(it, id)
}
_