A、B、C、Xの4つのフラグメントがあるとします。このようにして、フラグメント間を移動できます。
_... -> A -> C -> X and ... -> B -> C -> X
_
しかし、フラグメントXにいる場合はmNavController.navigateUp()
を呼び出して、フラグメントCをスキップしてフラグメントAまたはBに移動します。何をする必要がありますか?
UPD:ナビゲーションアーキテクチャコンポーネントのみのソリューションが必要 https://developer.Android.com/topic/libraries/architecture/navigation/ ありがとうございます!
与えられたR.id.fragmentC
はC宛先の名前です。X宛先から、次のことができます。
NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentC, true);
これにより、Cの前まですべての宛先がスタックからポップされ、AまたはBがスタックの一番上に残ります。
または、app:popUpTo
およびapp:popUpToInclusive
ナビゲーションの属性xml
リソースは、特定のトランザクションを実行するときにバックスタックを自動的にクリーンアップします。そのため、[戻る/上へ]ボタンをクリックすると、ユーザーがルートフラグメントに移動します。
<fragment
Android:id="@+id/fragment1"
Android:name="com.package.Fragment1"
Android:label="Fragment 1">
<action
Android:id="@+id/action_fragment1_to_fragment2"
app:destination="@id/fragment2"
app:popUpTo="@id/fragment1"
app:popUpToInclusive="true / false" />
</fragment>
@benteshaで言及されているように、これは、フラグメントCが含まれるまでフラグメントをポップするように機能します。
以下のようにしてこれを達成することもできます:
NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentA, false);
OR
NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentB, false);
そして、これはfragmentA/fragmentBのみにポップアップします。これはあなた自身と他の人が理解するための最も説明的な方法だと思います。