ナビゲーション コントローラは、ナビゲーションにおける主要なコンセプトの一つです。ナビゲーション グラフを保持し、アプリがグラフ内のデスティネーション間を移動できるようにするメソッドを公開します。
Navigation コンポーネントを使用する場合は、NavController
クラスを使用してナビゲーション コントローラを作成します。NavController
は一元管理を実施するナビゲーション API です。ユーザーがアクセスしたデスティネーションを追跡し、ユーザーがデスティネーション間を移動できるようにします。このガイドでは、アプリで NavController
を作成する方法について説明します。
NavController
にナビゲーション グラフを追加する方法については、ナビゲーション グラフを設計するをご覧ください。NavController
は、グラフ内のデスティネーションに移動する方法をいくつか提供します。詳細については、デスティネーションに移動するをご覧ください。
Compose
Jetpack Compose の使用時に NavController
を作成するには、rememberNavController()
を呼び出します。
val navController = rememberNavController()
コンポーザブルの階層の上位に NavController
を作成する必要があります。このオブジェクトを参照する必要があるすべてのコンポーザブルが参照できるように、十分上位の階層に作成する必要があります。
これにより、画面の外部でコンポーザブルを更新するための信頼できる唯一の情報源として NavController
を使用できます。これは、状態ホイスティングの原則に従います。
視聴回数
Views UI フレームワークを使用している場合は、コンテキストに応じて、次のメソッドのいずれかを使用して NavController を取得できます。
Kotlin:
Java:
NavHostFragment.findNavController(Fragment)
Navigation.findNavController(Activity, @IdRes int viewId)
Navigation.findNavController(View)
通常は、最初に NavHostFragment
を取得してから、フラグメントから NavController
を取得します。この手順を行うスニペットは以下のとおりです。
Kotlin
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
Java
NavHostFragment navHostFragment =
(NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
NavController navController = navHostFragment.getNavController();
参考資料
- ナビゲーション グラフを設計する: アプリのすべてのデスティネーションを含むグラフを
NavController
に追加する方法を詳しく説明したガイドです。 - デスティネーションに移動する:
NavController
を使用してナビゲーション グラフ内のデスティネーション間を移動する方法を説明するガイドです。