refirio.org
Menu
このサイトについて
levis
サーバメモ
技術メモ
ツール
過去の記事
記事一覧
お問い合わせ
Advertisement
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