Navigation Component における popUpTo オプションの活用
Android の Navigation Component を利用する際、画面遷移とともにナビゲーションスタック(バックスタック)を柔軟に制御することが求められる場合があります。
その中でも、popUpTo
オプション は、特定の Destination までのバックスタックを削除し、ユーザーが不要な画面に戻らないようにするための非常に有用な機能です。
この記事では、navigate()
メソッド使用時に popUpTo
オプションを指定する方法と、その利用シーンについて解説します。
popUpTo
オプションとは
popUpTo
オプションを利用することで、指定した Destination までの画面履歴を削除(ポップ)し、新たな画面に遷移することが可能です。
たとえば、ログイン画面からメイン画面に遷移する際に、ログイン画面をバックスタックから削除することで、ユーザーが「戻る」操作でログイン画面に戻らないようにする、といった用途で使用されます。
コード例
以下は、popUpTo
オプションを利用してバックスタックをクリアし、新しい Destination へ遷移するコード例です。
import androidx.navigation.NavOptions
import androidx.navigation.findNavController
// popUpTo オプションを利用して、バックスタックの一部を削除しながら遷移する例
val navOptions = NavOptions.Builder()
.setPopUpTo(R.id.targetDestination, inclusive = true)
.build()
findNavController().navigate(R.id.newDestination, null, navOptions)
このコードでは、R.id.targetDestination
までのバックスタックを削除(inclusive = true
により、指定した Destination 自体も削除)し、その状態から R.id.newDestination
へ遷移しています。
利用シーン
popUpTo
オプションは、以下のようなシーンで特に有用です。
-
ログイン後の画面遷移
ログイン処理が完了した後、ログイン画面や認証前の画面の履歴をクリアし、ユーザーが戻れないようにする。 -
フローのリセット
ユーザーがある操作を完了した際に、それまでの操作履歴を削除して新たなスタート地点から再度操作を開始させる。 -
特定の画面へ強制的に遷移
複雑な画面遷移の中で、特定の画面までバックスタックを削除し、シンプルなナビゲーションフローを維持する。
まとめ
Navigation Component の popUpTo
オプションを活用することで、ユーザー体験を損なうことなくナビゲーションスタックを柔軟に制御することが可能です。
Happy Coding!
Discussion