hiro99ma blog

何か技術的なこと

android: ViewModelの続き

2024/10/20

前回の Codelabs が終わっていないので続きをやろう。

前回

6. Compose UI を設計する

TextField に入力した文字は onValueChange イベントが発生する。
これは GameLayout(onUserGuessChanged)で渡されていて、内容は { gameViewModel.updateUserGuess(it) } である。
updateUserGuess()GameViewModel のメソッドだ。
このメソッドの中身は userGuess = guessedWord で、userGuess はプロパティだ。

    var userGuess by mutableStateOf("")
        private set

remember はいらないんだっけ、と思ったが、あれは @Composable 関数の中に変数を定義するときだけだ。
いままで出てきたのが remember by { mutableStateOf() } の形だけだったのでセットだと思い込んでいた。

わざわざ setter を使えなくしてメソッドを用意したのは、setter だとインライン展開みたいになって UI element の中で値を更新したことになるからだろうか?
backing property みたいにがんばってメソッドを使わないようにしていたり、わざわざメソッドにしたりのさじ加減がよくわからん。
たぶん、class 内でのアクセスは何でもできて処理も速くできるように、それ以外は getter だけ速く動くならよし、という感じじゃなかろうか。

ぐだぐだ言ってないで続きをやろう。

GameScreenGameViewModel を参照したりメソッドを呼び出したりするが、その逆はない。
GameLayoutGameScreen 経由でそのデータを使っている感じで、GameViewModel と直接の関係は持たない。

image

< Top page