Androidアプリケーション開発では、異なる画面間の移動は基本的ながらも重要な機能です。
Kotlinでのナビゲーション実装には多くの方法がありますが、ここではAndroid Jetpackのナビゲーションコンポーネントを使用したモダンなアプローチを取り上げます。
ナビゲーションコンポーネントは、フラグメント間のナビゲーションを簡単にし、さまざまなUIパターンをサポートし、ディープリンクの取り扱いを容易にするなど、多くの利点を提供します。
ナビゲーションコンポーネントの設定
始める前に、プロジェクトのbuild.gradleファイルにナビゲーションコンポーネントの依存関係を追加する必要があります。
dependencies {
implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
implementation "androidx.navigation:navigation-ui-ktx:2.3.5"
}
依存関係を追加したら、ナビゲーショングラフを作成します。これは、アプリのナビゲーションの全体的な構造を定義するXMLファイルです。Android Studioのナビゲーションエディタを使用すると、視覚的にナビゲーショングラフを作成および編集できます。
ナビゲーショングラフの作成
resディレクトリ内にnavigationディレクトリを新規作成します。navigationディレクトリ内で右クリックし、New>Navigation>Navigation Resource Fileを選択します。- ナビゲーションリソースファイルに名前を付け、
OKをクリックして作成します。
ナビゲーションエディタが開いたら、フラグメントを追加して、それらの間でナビゲーションのフローを定義します。各フラグメントは、目的地(Destination)として表されます。
ナビゲーションの実装
アクションの定義
画面間の移動はアクションを通じて定義されます。ナビゲーションエディタで目的地間をドラッグ&ドロップすることにより、アクションを作成できます。アクションは、ナビゲーショングラフ内で<action>タグとして定義されます。
ナビゲーションホストの設定
ナビゲーションホストは、ナビゲーションコンポーネントがUIコンテンツを表示する場所です。通常、NavHostFragmentを使用します。これは、アクティビティのレイアウトに追加されます。
<fragment
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:navGraph="@navigation/my_navigation" />
ナビゲーションのトリガー
Kotlinコード内でナビゲーションをトリガーするには、NavControllerを使用します。NavControllerは、現在のナビゲーションコンテキストを管理し、アクションを介して画面間を移動させます。
findNavController().navigate(R.id.action_next)
上記のコードは、action_nextというIDを持つアクションを使用して、次の目的地に移動します。
実践例: ログインフローの実装
ログイン画面からメイン画面へのナビゲーションを例に取り上げます。まず、ログインフラグメントとメインフラグメントをナビゲーショングラフに追加し、両者間にアクションを定義します。次に、ログインボタンがクリックされたときにそのアクションをトリガーするようにします。
btnLogin.setOnClickListener {
findNavController().navigate(R.id.action_login_to_main)
}
まとめ
Kotlinでのナビゲーションは、ナビゲーションコンポーネントを使用することで、直感的で簡単に実装できます。
この記事では、ナビゲーションコンポーネントの基本的な設定から、ナビゲーショングラフの作成、画面間の移動のトリガーまでを説明しました。
このガイドを参考にしながら、より複雑なナビゲーションフローに挑戦してみてください。

