Kotlinで始めるAndroid Navigationコンポーネント入門

目次

  1. Navigation Componentとは
  2. プロジェクトのセットアップ
  3. ナビゲーショングラフの作成
  4. ナビゲーションホストの設定
  5. アクションの追加
  6. ナビゲーションの実装
  7. まとめ

Navigation Componentは、Android Jetpackの一部であり、アプリ内の画面遷移を簡単に管理するためのライブラリです。以下の3つの主要コンポーネントがあります:

  • ナビゲーショングラフ:アプリ内の全てのナビゲーションフローをXMLで定義します。
  • NavHost:ナビゲーショングラフをホストするコンテナで、画面遷移が行われます。
  • NavController:ナビゲーション操作を管理するオブジェクトです。

プロジェクトのセットアップ

まず、プロジェクトにNavigation Componentを追加するために、build.gradleファイルに以下の依存関係を追加します:

dependencies {
    def nav_version = "2.5.3"
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}

また、Safe Argsプラグインを使用するために、プロジェクトのbuild.gradleファイルに以下を追加します:

buildscript {
    dependencies {
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

モジュールのbuild.gradleプラグインを適用します:

apply plugin: 'androidx.navigation.safeargs.kotlin'

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

次に、res/navigationディレクトリを作成し、その中にnav_graph.xmlファイルを作成します。このファイルにナビゲーショングラフを定義します。

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.app.HomeFragment"
        android:label="Home">
        <action
            android:id="@+id/action_homeFragment_to_detailFragment"
            app:destination="@id/detailFragment" />
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:name="com.example.app.DetailFragment"
        android:label="Detail" />
</navigation>

ナビゲーションホストの設定

activity_main.xmlファイルにNavHostFragmentを追加して、ナビゲーションホストを設定します。

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph" />

アクションの追加

ナビゲーショングラフで定義したアクションを使用して、フラグメント間の遷移を実装します。HomeFragment.ktでボタンのクリックイベントを処理し、ナビゲーションを実行します。

class HomeFragment : Fragment(R.layout.fragment_home) {

    private lateinit var binding: FragmentHomeBinding

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding = FragmentHomeBinding.bind(view)

        binding.buttonNavigate.setOnClickListener {
            findNavController().navigate(R.id.action_homeFragment_to_detailFragment)
        }
    }
}

ナビゲーションの実装

DetailFragment.ktでは、特に設定は必要ありませんが、必要に応じて受け取ったデータを表示するなどの処理を行います。

class DetailFragment : Fragment(R.layout.fragment_detail) {

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // 必要に応じてデータを取得して表示
    }
}

まとめ

この記事では、Navigation Componentを使用してKotlinでAndroidアプリのナビゲーションを実装する方法を紹介しました。Navigation Componentを使用することで、複雑なナビゲーションパターンでも簡潔に実装できるようになります。ぜひ、実際のプロジェクトで試してみてください。