Memo

メモ > 技術 > IDE: AndroidStudio > アプリの作成(Jetpack Compose / ビューモデルを扱う)

■アプリの作成(Jetpack Compose / ビューモデルを扱う)
※未検証 ViewModel の概要 | Android デベロッパー | Android Developers https://developer.android.com/topic/libraries/architecture/viewmodel?hl=ja #69 Jetpack ComposeでToDoアプリを作る - HiltとViewModel | Mokelab Blog https://blog.mokelab.com/69/compose_todo7.html とにかく簡単にViewModelまとめ - Qiita https://qiita.com/KIRIN3qiita/items/7d833e2c010c0b2c02d9 ViewModelの採用が必須というわけでも無いらしい Jetpack ComposeでViewModelを使わずに、Composable関数を使って状態とロジックを切り出す! - Qiita https://qiita.com/karamage/items/9b2b5a79c364b72836d4 「SwiftUIでMVVMを採用するのは止めよう」と思い至った理由 - Qiita https://qiita.com/karamage/items/8a9c76caff187d3eb838 ViewModel を捨てて マルチプラットフォーム に備える https://android.benigumo.com/20220928/without-viewmodel/ 以下、ViewModelを使わずにComposable関数で対応する場合のコード ■カウントアップするプログラム
@Composable fun MainScreen() { Column { var count by remember { mutableStateOf(0) } Text("ボタンのタップ回数: $count") Button( onClick = { count++ } ) { Text("カウントアップ") } } }
※上記コードでは、画面が回転したときに値が失われる 「by remember」の代わりに「by rememberSaveable」にすると、画面が回転しても値を保持できる ただし rememberSaveable は Parcelable しか保存できないので、オブジェクトを保存したい場合は Parcelable にシリアライズする必要があるらしい(未検証) ■状態とロジックを切り離す
@Composable fun MainScreen() { Column { val counter = rememberCounter() Text("ボタンのタップ回数: ${counter.count}") Button( onClick = { counter.increment() } ) { Text("カウントアップ") } } }
rememberCounter は model/Counter.kt など別ファイルに記載する
data class Counter( val count: Int, val increment: () -> Unit ) @Composable fun rememberCounter(): Counter { var count by rememberSaveable { mutableStateOf(0) } return remember(count) { Counter( count = count, // 状態 increment = { count++ } // ロジック ) } }

Advertisement