PR

【Android開発】Kotlin入門 画面遷移はNavigationコンポーネントで

【Android】
広告

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のナビゲーションエディタを使用すると、視覚的にナビゲーショングラフを作成および編集できます。

ナビゲーショングラフの作成

  1. resディレクトリ内にnavigationディレクトリを新規作成します。
  2. navigationディレクトリ内で右クリックし、New > Navigation > Navigation Resource Fileを選択します。
  3. ナビゲーションリソースファイルに名前を付け、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でのナビゲーションは、ナビゲーションコンポーネントを使用することで、直感的で簡単に実装できます。

この記事では、ナビゲーションコンポーネントの基本的な設定から、ナビゲーショングラフの作成、画面間の移動のトリガーまでを説明しました。

このガイドを参考にしながら、より複雑なナビゲーションフローに挑戦してみてください。

広告
【Android】
広告
タイトルとURLをコピーしました