androidx.fragment.app.FragmentContainerView
を通常のfragment
の代わりにnavHostとして使用すると、方向を変更した後、アプリが目的地に移動できません。
次のエラーが表示されます:Java.lang.IllegalStateException: no current navigation node
適切に使用するために知っておくべき落とし穴はありますか、またはナビゲーションコンポーネントの使用方法が正しくありませんか?
ビューを持つ単純なアクティビティxml:
...
<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:layout_behavior="@string/appbar_scrolling_view_behavior"
app:navGraph="@navigation/nav_simple" />
...
ナビゲーションコード:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/nav_legislator.xml"
app:startDestination="@id/initialFragment">
<fragment
Android:id="@+id/initialFragment"
Android:name="com.example.fragmenttag.InitialFragment"
Android:label="Initial Fragment"
tools:layout="@layout/initial_fragment">
<action
Android:id="@+id/action_initialFragment_to_destinationFragment"
app:destination="@id/destinationFragment" />
</fragment>
<fragment
Android:id="@+id/destinationFragment"
Android:name="com.example.fragmenttag.DestinationFragment"
Android:label="Destination Fragment"
tools:layout="@layout/destination_fragment" />
</navigation>
これは、バグを簡単に再現できるgithubリポジトリです: https://github.com/dmytroKarataiev/navHostBug
_no current navigation node
_エラーは、グラフが設定されていないときにnavigate()
を呼び出そうとすると発生します。 FragmentContainerView
を使用していて、構成を変更した後にのみ発生する場合、これは このバグ に関連しています。これは修正され、Navigation 2.2.0でリリースされる予定です。 rc03。
この問題を回避するには、_<fragment>
_に戻すか、_app:navGraph="@navigation/nav_simple"
_を削除して、代わりにnavController.setGraph(R.navigation.nav_simple)
を呼び出します。