「Composeで画面間を移動する」をやりました!

はじめに

今日も「Composeを用いたAndroidアプリ開発の基礎」のコードラボをやりました。今回は、ComposeにおけるNavigationについて学ぶことができる「Composeで画面間を移動する」を行いました!今回も、学んでためになったことを箇条書きでまとめていこうと思います!

学んだこと

・KotlinのEnumクラスには、プロパティ名を含む文字列を返すnameプロパティがある

定義

enum class CupcakeScreen { 
    Start
}

呼び出し

startDestination = CupcakeScreen.Start.name

・map()関数を使用し、それぞれのstringIdに対しcontext.resources.getString()を呼び出すことで、stringIdで構成されたリソースIDのリストから文字列のリストに変換することができる

・それぞれのComposableにnavControllerを渡すのは適切ではない

・表示された画面は一つ一つ前の画面の上に積み重ねられ、システムの「戻る」ボタンで一つ前の画面に戻り削除される。一番下には、startDestinationがあり、表示されている画面が一番上になる。この履歴をバックスタックという。

・navControllerには、popBackStack()メソッドがある。

例)

navController.popBackStack(route, inclusive)

必須のパラメータが2つある。以下は、それぞれのパラメータの説明文

  • route: 戻るデスティネーションのルートを表す文字列。

  • inclusive: ブール値。true の場合、指定したルートもポップ(削除)します。false の場 合、popBackStack() は開始デスティネーションより上にあるデスティネーションをすべて削除し、 ユーザーが目にする一番上の画面として開始デスティネーションを残します。

・インテントをセットアップする手順は、以下の流れ

  1. インテントオブジェクトを作成し、インテントを指定する

  2. インテントで送信する追加データの型を指定する。テキストだと"text/plain"を使用することができ、"image/"や"video/"など他のタイプも使用することが出来る。

  3. putExtra()メソッドを呼び出して共有するテキストや画像などの追加データをインテントに渡す。EXTRA_SUBJECTやEXTRA_TEXTなど多く存在する。

  4. コンテキストのstartActivity()メソッドを呼び出し、インテントから作成したアクティビティを渡す。

例)

val intent = Intent(Intent.ACTION_SEND).apply {
        type = "text/plain"
        putExtra(Intent.EXTRA_SUBJECT, subject)
        putExtra(Intent.EXTRA_TEXT, summary)
    }
    context.startActivity(
        Intent.createChooser(
            intent,
            context.getString(R.string.new_cupcake_order)
        )
    )

・インテントを送る際に使うEXTRA_SUBJECTは題名であり、Discordなどのチャットに送っても出てこないが、Gmailなどで送る際に、件名として出てくる。

・インテントを送る際に使うEXTRA_TEXTは、本文である。

・Enumクラスには、パラメータを追加することが出来る。

・navController.previousBackStackEntryでバックスタックがあるかどうかを確認する。

・navController.navigateUp()メソッドで一つ前の画面に戻る。

・navController.currentBackStackEntryAsState()は、現在のバックスタックを取得するもの。これにより、アプリの現在の画面状態を取得することが出来るようになる。(ChatGPT)

・backStackEntry?.destination?.route は、現在の画面のroute文字列を取得出来るコード。

routeは、NavHostを使用する際に使うcomposable()の括弧内の文字

・ButtonとOutlineButtonは色が反転しているから2つセットで使うと対になっている感じがして良さそう。

さいごに

今回のコードラボは、基本的なNavigationの仕方、Intentの使用方法について学ぶことが出来るコードラボでした。今までのアプリ開発でNavigationを使用したことはあったのですが、改めて学んで知らないことがたくさんあることがわかりました。やはりチュートリアルはやったほうがいい…!

次は、「演習:ナビゲーションを追加する」をやろうと思います!前回の記事でやると言っていた「演習:Dessert ClickerにViewModelを追加する」はやったのですが、あまり記事に書く内容が見つからず記事にしませんでした。なので、次の演習も記事にしないかもしれないです。


この記事が気に入ったらサポートをしてみませんか?