「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() は開始デスティネーションより上にあるデスティネーションをすべて削除し、 ユーザーが目にする一番上の画面として開始デスティネーションを残します。
・インテントをセットアップする手順は、以下の流れ
インテントオブジェクトを作成し、インテントを指定する
インテントで送信する追加データの型を指定する。テキストだと"text/plain"を使用することができ、"image/"や"video/"など他のタイプも使用することが出来る。
putExtra()メソッドを呼び出して共有するテキストや画像などの追加データをインテントに渡す。EXTRA_SUBJECTやEXTRA_TEXTなど多く存在する。
コンテキストの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を追加する」はやったのですが、あまり記事に書く内容が見つからず記事にしませんでした。なので、次の演習も記事にしないかもしれないです。
この記事が気に入ったらサポートをしてみませんか?