前回の続き。
と、ここまで参考資料で調べて、
これだとデータ保存時とかにViewModelからModelにデータを渡すやり方とか、
取得したデータを返す方法がわからず…うーん。
引数で渡すのは密結合すぎる気がする。
このあといろいろ調べてLoader使う?
いやこれはAPIコール用っぽい?
SQLではどうやる?
と調べた結果のメモです。
結論
AsyncTaskLoaderを使うのがメジャーらしい。
Loaderを呼び出す
Activity側で以下のようにするとイベントを呼べるらしい。
getSupportLoaderManager().initLoader(LOADER_ID, args, mCallback);
-
LOADER_IDはローダーごとに設定するものっぽい?
どこかに定数として切ってあとでデバッグしやすくしとかないとハマりそう…。 -
argsはBundle型で引数を渡せるみたい。
Bundle型はAndroidのデータ保存でよく使われる型らしい。
Activityが死ぬ時によく使われるみたい。
非常にわかりやすい記事が合ったので参考記事に置いときます。 -
mCallbackはコールバックを指定する。
Activityに定義したLoaderManager.LoaderCallbacks型のクラスを指定して、
ロード完了後の処理を実行するみたい。
今回はDBから取得した結果を表示したり、登録/変更結果を表示するとかになりそう。
Loaderで取得した結果はonLoadFinishedというメソッドの引数に指定されるみたい。
実際の動きのイメージ
-
ユーザーからの操作(ボタン押下とか)
Activityのイベントハンドラで(必要があれば)Loaderを呼び出す。
Modelは更新要求を処理して結果を通知する。 -
Modelからの通知
ロードが終わったらActivity側のコールバックが叩かれて処理する。
このときActivityが死んでいれば恐らく叩かれないのかな?
(テストはしておいた方が良さそう)
終わりに
なんか本でも一冊買ったほうが良かったかなーと思い始めてきた。
いま時ネットでもいけるだろうと思っていたけど、
やはり体系的な勉強は本が一番だよなぁと。
ただ、最新の情報じゃないことが多いのでそこは良し悪しあるけれど。
あと基礎はあんまり教えてくれないのかな。
最近だとkotlinが多そうだし…。
だいたいイメージが掴めてきたのであとは以下を調べて、
具体的な設計と実装に入りたいなぁ。
- サポートする環境の選択はどれが良いか?
- プロジェクト作成時のアクティビティの選択はどれが良いか?
- 使用するウィジェットとレイアウトの調査