前提・実現したいこと
KotlinでAndroidアプリ開発の勉強を始めた初心者です。(C#歴は5年ほど)
MVVMアーキテクチャで、
シンプルな電卓のようなアプリケーションを作成しています。
Modelで算出した値を、画面のTextViewに反映したいのですが、実装方法がわかりません。
発生している問題
ViewModelで電卓ボタンのクリックイベントを受け取る
→ Modelの計算クラスの計算処理が走る
→ Modelのデータクラスの値(ObservableField<T>)を更新★ここまではOK
ObservableField<T>に値がセットされた時に、
①変更通知を上げる方法がわからない
②変更通知を上げたとして、それをどのように監視すればよいかわからない
該当のソースコード
Kotlin
1// 計算処理を行うクラス(Model) 2object Calculation { 3~省略~ 4 // 計算結果をデータクラスにセットする 5 // ※setValueには計算結果を格納 6 CalcData.resultData.set(setValue) 7~省略~ 8}
Kotlin
1// 計算結果を保持するクラス(Model) 2object CalcData { 3 // 監視する計算結果 4 // Calculation からセットして、画面に表示させたい 5 val resultData = ObservableField<String>("0") 6}
...
なんとなく、以下のような実装をイメージしています。
ViewModelがModelのデータクラスの値を監視し、変更通知を受け取る
→ ViewModel内のViewとバインドしている値をさらに更新
→ Viewに通知され値が更新される
Kotlin
1// 画面にバインドしているViewModelクラス 2class HogeViewModel : ViewModel(){ 3 private var mResult = MutableLiveData<String>().apply{ 4 value = "0" 5 } 6 // Viewとバインドしている値 7 val result: LiveData<String> 8 get() = mResult 9 10 11 // こんなかんじでデータを監視する? 12 val aaa = CalcData.resultData.addOnPropertyChangedCallback(★) 13 14 // ★にはコールバック関数を登録? 15 16 // コールバック関数 17 fun fuga(){ 18 // データクラスの値を、result に反映して、Viewが更新 19 result = CalcData.resultData.get()!! 20 } 21}
↑めちゃくちゃですが、調べても調べてもベストプラクティスがわからず、、頭が爆発しそうです。
ご経験のある先輩方がいらっしゃいましたら、ご教授願います。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/21 15:44