🧭

Navigation Component における popUpTo オプションの活用

2025/02/13に公開

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