第14回|Compose④:ナビゲーションの導入[AI]


⚙️ 準備と環境設定

Jetpack Composeを用いたアプリ開発では、複数画面を遷移するためにNavigation Composeを活用します。第14回では、Composeでの画面遷移の基本から、NavControllerを用いた複数画面管理までを解説します。

Android Studio Otter
Android Studio Otter

1. 開発環境の確認

  • Android Studio Otter 2025.2.1
  • Kotlin 1.9以上、Jetpack Compose 2.0以上
  • Navigation Compose 2.6.0以上
  • Gemini AIプラグイン有効化済み
  • Composeプロジェクトが作成済み

Navigation Composeを利用するには、プロジェクトのbuild.gradleに依存関係を追加しておきます。

dependencies {
    implementation "androidx.navigation:navigation-compose:2.6.0"
}

🤖 Geminiによる支援の使い方

Geminiに「Composeで複数画面遷移を行うナビゲーションコードを生成」と入力すると、NavHostNavControllerの雛形コードを自動生成できます。AI提案では、引数付き画面遷移や戻る処理も補完されるため、初心者でも安全に画面遷移を実装可能です。

// Geminiへのプロンプト例
"Jetpack ComposeでHome画面からDetail画面へ遷移するナビゲーションコードを生成"

💡 Kotlinでの実装例

3. 基本的な画面遷移

@Composable
fun NavExampleApp() {
    val navController = rememberNavController()

    NavHost(navController = navController, startDestination = "home") {
        composable("home") { HomeScreen(navController) }
        composable("detail") { DetailScreen() }
    }
}

@Composable
fun HomeScreen(navController: NavHostController) {
    Column(
        modifier = Modifier.fillMaxSize().padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text("ホーム画面")
        Spacer(modifier = Modifier.height(16.dp))
        Button(onClick = { navController.navigate("detail") }) {
            Text("詳細画面へ")
        }
    }
}

@Composable
fun DetailScreen() {
    Column(
        modifier = Modifier.fillMaxSize().padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text("詳細画面")
    }
}

この例では、NavHostでホーム画面から詳細画面への遷移を管理しています。NavControllerrememberNavController()で保持し、Button押下でnavigate()を呼び出すだけで簡単に画面遷移が可能です。

4. 引数付き画面遷移の例

@Composable
fun NavWithArgsApp() {
    val navController = rememberNavController()

    NavHost(navController = navController, startDestination = "home") {
        composable("home") { HomeScreenWithArgs(navController) }
        composable(
            "detail/{itemId}",
            arguments = listOf(navArgument("itemId") { type = NavType.IntType })
        ) { backStackEntry ->
            val itemId = backStackEntry.arguments?.getInt("itemId") ?: 0
            DetailScreenWithArgs(itemId)
        }
    }
}

@Composable
fun HomeScreenWithArgs(navController: NavHostController) {
    Column(
        modifier = Modifier.fillMaxSize().padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Button(onClick = { navController.navigate("detail/42") }) {
            Text("ID付き詳細画面へ")
        }
    }
}

@Composable
fun DetailScreenWithArgs(itemId: Int) {
    Column(
        modifier = Modifier.fillMaxSize().padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text("詳細画面: ID = $itemId")
    }
}

この方法により、画面遷移時にパラメータを渡すことが可能です。Gemini AIは引数付き遷移のコード例も生成できるため、複雑な画面構成でも効率よく開発できます。


🧩 FirebaseまたはCloudとの連携

5. 画面遷移とFirestore連携

例えば、ユーザーが詳細画面でコメントを送信する場合、Firestoreへの保存処理を画面遷移に組み込むことができます。

@Composable
fun DetailScreenWithFirestore(userId: String) {
    val db = FirebaseFirestore.getInstance()
    var comment by remember { mutableStateOf("") }

    Column(modifier = Modifier.padding(16.dp)) {
        TextField(
            value = comment,
            onValueChange = { comment = it },
            label = { Text("コメント入力") }
        )

        Spacer(modifier = Modifier.height(16.dp))

        Button(onClick = {
            db.collection("comments").document(userId)
                .set(mapOf("comment" to comment))
                .addOnSuccessListener { println("保存成功") }
                .addOnFailureListener { println("保存失敗") }
        }) {
            Text("コメント送信")
        }
    }
}

ナビゲーションとFirestore操作を組み合わせることで、ユーザーが画面遷移中に入力したデータをクラウドに安全に保存できます。Gemini AIを利用すれば、Firestoreとの非同期処理も簡単に雛形生成できます。


📘 まとめ

第14回では、Jetpack Composeでのナビゲーション導入を学びました。NavHostNavControllerを使うことで、ホーム画面から詳細画面への基本遷移、引数付き遷移、Firestore連携まで効率的に実装可能です。Gemini AIの支援を活用すると、遷移処理や引数管理、非同期処理の雛形コードを自動生成でき、開発速度と正確性を大幅に向上できます。


🤖Android開発(Otter)[AI]Android Studio Otter × Gemini × Firebase × Google Cloud 開発支援ブログ一覧 Android Studio Otter 🩵【第1部】導入編:Android Studio Otterの準備と基本操作(1〜5回) ・ 第1回|A…
続きを読む
 zesys.net
🤖Android開発(Otter)[AI]


「※本ブログはこの一文以外は、AIによる記載です。内容にウソが含まれている可能性がありますので、ご注意ください。写真もAIで作成しています。」

広告

迷子探偵やもやも [AI]

探偵はいつも迷子ですw

シェアする