Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。次に、ViewModelの作り方を紹介していきます。ViewModelを継承ViewModelは一つのクラスとして定義します。その際、androidx.lifecycle.ViewModelクラスを継承します。先述のように、ViewModelはアクティビティに寄り添うように存在することから、原則、一つのアクティビティクラスに対して一つ作成します。MainActivity用のViewModelは、MainViewModelとするように、対応関係がわかるようにしておきます。クラスメンバはUIのデータ処理を記述ViewModelクラスのメンバとしては、相方となるアクティビティに必要なデータを踏まえた上で、以下のものを定義します。UIで扱うデータのprivateフィールド上記フィールドのセッタとゲッタ(アクセサメソッド)UIの入出力に必要なデータをやり取りするためのメソッド例えば、前節で紹介した足し算アプリのMainActivity用のViewModelであるMainViewModelは、Javaではリスト1のようなコードとなります。num2;}}足し算アプリでは、入力された2個の数値が、フィールドとして定義される必要があります。これらを定義しているのが(1)の_num1と(2)の_num2です。それぞれのアクセサメソッドが(9)です。これらのフィールドをもとに足し算処理を行なっているのが(3)です。EditTextにしても、TextViewにしても、実際に画面とのデータのやり取りは文字列です。そのため、文字列と整数値とのやり取りを可能にしているメソッドが(4)〜(8)です。(4)が足し算結果を文字列に変換しているメソッドです。(5)と(6)が_num1に対しての文字列と整数値の相互変換、(7)と(8)が_num2に対しての文字列と整数値の相互変換のメソッドです。それぞれのメソッドにおいて、文字列が空文字("")の場合や整数値が0の場合などの処理も含め、問題なくデータを受け取ったり表示したりできるようにしています。Kotlinはプロパティを利用Kotlinコードでも、ViewModelは同様の作りとなり、リスト2のようになります。num2Str.toInt()}}}リスト2のJavaコードをそのままKotlinコードに置き換えたような内容になっていますが、1点大きく違うのが、アクセサメソッドがないことです。Kotlinの場合は、(1)と(2)のようにプロパティを定義するだけで、自動的にアクセサメソッド経由でのデータのやり取りとなるからです。他のコードは、Javaコードと同じく、(3)が足し算処理を行うメソッドであり、(4)がその結果の文字列を取得するメソッドです。(5)と(6)がnum1に対しての文字列と整数値の相互変換メソッド、(7)と(8)がnum2に対しての文字列と整数値の相互変換メソッドです。このように、ViewModelを定義すると、UIに必要なデータとその処理が、全てViewModelクラスに記述されることになります。