ナビゲーションコンポーネントのポップ動作が正常に機能しない
私が作成しているアプリの内部では、シングルアクティビティアーキテクチャを使用しており、Googleの新しいナビゲーションコンポーネントを使用してアプリ内を移動することにしました。
それは大きな期待を示していますが、私の質問がそれらの1つについてあるいくつかの欠点があります。
順番にナビゲートされる3つのフラグメントがあると仮定します。ただし、3番目のフラグメントで[戻る]ボタンがクリックされたときに最初のフラグメントに戻りたい場合を除きます。方法は次のとおりです。
<?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/main_nav_graph.xml"
app:startDestination="@id/firstFragment">
<fragment
Android:id="@+id/firstFragment"
Android:name="com.hmomeni.navisample.FirstFragment"
Android:label="fragment_first"
tools:layout="@layout/fragment_first" >
<action
Android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment" />
</fragment>
<fragment
Android:id="@+id/secondFragment"
Android:name="com.hmomeni.navisample.SecondFragment"
Android:label="fragment_second"
tools:layout="@layout/fragment_second" >
<action
Android:id="@+id/action_secondFragment_to_thirdFragment"
app:destination="@id/thirdFragment"
app:popUpTo="@+id/firstFragment" />
</fragment>
<fragment
Android:id="@+id/thirdFragment"
Android:name="com.hmomeni.navisample.ThirdFragment"
Android:label="fragment_third"
tools:layout="@layout/fragment_third" />
</navigation>
ここでの問題は、ナビゲーションを2回繰り返し実行したいときに、例外が発生して次のように通知されることです。
Java.lang.IllegalArgumentException:ナビゲーションの宛先com.hmomeni.navisample:id/action_firstFragment_to_secondFragmentはこのNavControllerに認識されていません
さらなる調査により、戻るボタンを押して最初のフラグメントに戻ると、navController.currentDestination
は依然としてThirdFragment
を参照していますが、これは間違っており、FirstFragment
である必要があります。
これに関するどんな助けでもありがたいです。
私はこの質問に似た問題を抱えていましたが、循環ナビゲーションで、バックスタックがポップされませんでした。 C-> Aから移動するときに、navigate(int resId)
のパラメーターを誤ってR.id.fragmentC
に設定しました
のようなアクションを使用する代わりに
R.id.action_c_to_a
解決策とは言いませんが、ある程度の回避策を見つけました。
この問題を回避するには、ThirdFragment
からそれ自体へのアクションを作成し、navigateが呼び出されたときにnavController.currentDestination
を確認します。
私は本当の解決策が欲しいという理由でこの答えを受け入れません。