MVVM基礎

Coroutineの記事だがMVVMの基礎から書いてあり、関連記事のマルチモジュール化も含めて参考になる tech.gunosy.ioこれから自社に導入していくときの参考に どっかで時間作ってJetpack Compose Pathwaysやりたい tech.gunosy.ioそのほかの記事含めgunosyのテ…

DroidKaigi2023見逃してたセッション

Androidアプリの良いユニットテストを考える www.youtube.com 基本方針は以下で良さそう Androidフレームワークに依存したコードと依存していないアプリのロジックを切り離してPure Local Test(Robolectricでない単純なテスト)で実行できるようにする Andr…

DroidKaigi2023 Day2オンライン参加のメモ

リッチUIについて色々な事例紹介 speakerdeck.com 文字列や画像のグラデーションや背景追加や矩形追加等 かなりのパターンのアニメーションについても紹介されている 音量制御についてのセッション docs.google.com 音量制御はあまり触れてこなかったので参…

DroidKaigi2023 Day1オンライン参加のメモ

オンラインで参加して気になったセッションのメモ よくあるUIのサンプル github.com 結構使えそうな事例があるので参考になる。 1. ローディング 2. ボトムナビゲーション 3. ボトムシート 4. アコーディオン 5. カルーセル 6. クレジットカード番号入力 7. …

JetpackComposeで上下左右の位置関係を反転できるレイアウトを作る

qiita.com これの「子を右から左に配置したい」のところを参考にして上下も変更可能にカスタムした。 @Composable fun InversionLayoutExample( layoutDirection: LayoutDirection = LayoutDirection.Ltr, idStart: Boolean = true) { Column(modifier = Mod…

9/7の学習内容

Kotlin Coroutines Flowについて qiita.com これまでstreamを扱っていた箇所をこれで実装できるかも ViewModelとRetrofitでの通信実装例 satoshun.github.io かなり近い形で使えそう エラーハンドリングこれまでtry-catchでやってたけどrunCatchingの方が見…

今日の学習内容

パーミッション取得 Jetpack ComposeでPermissionを取得したい - 縁側プログラミング LazyXXXのかくつき こっちはまさにLazyVerticalGrid使ってて気になってたとこだった LazyColumnのスクロールがカクカクするときの確認ポイント(Stableアノテーション) -…

ViewModelとの連携

コードは参考サイトからの流用になります。 ViewModelの定義の中で変更を検知したい値(count)をMutableLiveDataとして定義する。初期値はここでは0 class SampleViewModel: ViewModel() { val count = MutableLiveData(0) fun countUp() { val c = count.val…

JetpackComposeのUI更新の仕組み

Column { var displayCount by remember { mutableStateOf(0) } Text( text = "$count", modifier = Modifier.padding(20.dp) ) Button( onClick = { count++ } ) { Text(text = "Count up!") } }displayCountの宣言時にmutableStateOf(0)で初期値を0に設定…

MVVMの基礎から見ていく①

@Composable fun CountUp() { var count: Int by remember { mutableStateOf(0) } Column { Text(text = "$count") Button( onClick = { count += 1 } ) { Text(text = "Count Up!") } } }変数の宣言でby rememberとすることで状態の保存をし、状態の変化を…

CheckBoxを含むリストアイテムでアイテム全体をチェックON/OFF切り替え対象にする

Checkboxの中ではなく親要素に指定することで対象を変更できる 修正前 @Composable private fun TopicItem(itemTitle: String, selected: Boolean, onToggle: () -> Unit) { // ... Row( modifier = Modifier .padding(horizontal = 16.dp, vertical = 8.dp)…

Navigation

RallyDestination でicon、route(destinationを指定するためのString)、表示するComposableをまとめてinterfaceとして定義(本来はComposableは分離するべきとのこと) Overview, Accounts, Bills で各画面に対する値を指定 /** * Contract for informatio…

Jetpack Compose CodeLab / Jetpack Compose の状態 - ViewModelの状態

警告: ViewModel はコンポジションの一部ではありません。そのため、コンポーザブルで作成された状態(保存された値など)は保持しないでください。メモリリークが発生する可能性があります。 とのこと。ViewModel の外部から変更できないように_tasksを定義…

Jetpack Composeでのリスト操作

Jetpack Compose の状態のCodeLab続きデータクラスを作って仮データを入れる data class WellnessTask(val id: Int, val label: String) private fun getWellnessTasks() = List(30) { i -> WellnessTask(i, "Task # $i") }このデータクラスのListをLazyColu…

JetpackCompose チュートリアル6 Jetpack Compose の状態

1つのComposableで2つの状態を表現できる。 UI上でそれぞれ別の部品なので更新のあった値(waterCount, juiceCount)に関わるComposableだけが再Composeされる。 @Composable fun StatefulCounter() { var waterCount by remember { mutableStateOf(0) } var j…

JetpackCompose チュートリアル5

更新滞りがちですがちまちま公式のCodeLab進めてます。 背景色の指定 Jetpack Compose のテーマ設定より 要素の色を設定する際は、適切なコンテンツ色である CompositionLocal 値が設定されるため、Surface を使用することをおすすめします。Modifier.backgr…

JetpackCompose チュートリアル4

リストをアニメーションする 状態変数を定義(expanded) 状態による変化幅を定義(extraPadding)。ここでは高さを変える アニメーションさせたい部分で上記で定義した変化幅を指定する var expanded by remember { mutableStateOf(false) } val extraPadding b…

JetpackCompose チュートリアル3

状態の保持 状態はrememberで保持できるが画面回転やプロセス終了で状態破棄されるので保持したい場合はrememberSaveableを使う。 MyApp内での分岐にshouldShowOnboardingを使いたいので定義自体はMyApp内に保持してOnboardingScreenにメソッドを渡す→ボタン…

JetpackCompose チュートリアル2

要素の中央寄せ 中身を中央寄せしたい親要素で以下を指定 verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, Textに背景をつける Surfaceで囲ってSurfaceにcolorを指定する。 Surafceのようなマテリアルコン…

Jetpack Compose チュートリアル1

理解出来てなかった部分のメモ materialとmaterial3では色指定方法が若干違う material→MaterialTheme.colors.secondary material3→MaterialTheme.colorScheme.secondary ダークテーマの確認 Composeの前に以下でプレビューにも表示される @Preview( uiMode …

Handlerについて

Androidまじめに使えるようにしていこうということでメモがてら記録に残していく。 Handlerクラスはスレッド間でメッセージを受け渡すための仕組み UIを管理するメインスレッドでは、内部的にLooper(メッセージキュー:別スレッドからのメッセージを管理し…