なんとなくAndroidアプリ作れそうな空気は感じたけどどういう構造にするのが一般的なのか知りたかったのでこれを眺めている。
root
BasicAppがApplicationを実装しててこいつ経由でリポジトリとってこれるようになってる
db
- DataGenerator
- fixture的なやつ
converter
Utility的な
dao
Dao。 LiveDataで受けるようにすると、データの変更に対してXXXを発火、みたいなことができる
entity
Entity。
model
なんかデータのフィールドを持ってるinterface。entityが背負っている。 entityをmodelの層で使うぜ的なあれ?
ui
Activityがここにいる MainActivityのonCreateの引数のBundleてなんだろ
https://qiita.com/yyyske/items/c6e342a9008bebef75bd
Activityが死ぬとここになんか入ってくるらしい
Activityが破棄されたあとの復元時に必要なデータをbundleに突っ込んどいてonCreateでbundleがnullの時に復元すると良いらしい
が、このサンプルではそういうことをしてる感じがしないのでよくわからん
Adaptor
Flagmentでモデルに変更が入るとAdaptorに変更後のデータをセットする感じ RecyclerView.Adapterは多分RecyclerViewに値をバインドするのをやっている
Viewmodel
- ViewModelがいる
- ViewModelのファクトリが初期化されるタイミングでApplicationからリポジトリを取得してる
- ViewModel自体はリポジトリとApplicationを受け取って初期化時に必要なデータを取ってきてる
ということはViewModelそのものは 画面に表示するためのデータを取ってきて保持するやつ という理解でいいのかな
ViewModelはFlagmentのonActivityCreatedで生成している。 https://github.com/googlesamples/android-architecture-components/blob/17c315a050745c61ae8e79000bc0251305bd148b/BasicSample/app/src/main/java/com/example/android/persistence/ui/ProductFragment.java#L68
onActivityCreatedはFlagmentが呼び出されたActivityのonCreateで呼ばれる http://sakura-bird1.hatenablog.com/entry/20111207/1323267262
その他
fragmentってなんだ https://qiita.com/Reyurnible/items/dffd70144da213e1208b Activityの画面の中に表示される一要素って感じ
ざっくり流れとしての理解
- MainActivityが呼び出されると、Fragmentを生成して画面要素にFragmentを追加?
- FragmentのonCreateViewが呼ばれて、レイアウトが設定される
- FragmentのonActivityCreatedが呼ばれる
- ViewModelProviders経由でViewModelを生成する(ViewModelProvidersはViewModelのライフサイクルを管理してくれるらしい)
- subscribeToModelでモデルをサブスクライブする
- Daoからデータを変更すると、LiveDataで取得したデータについてオブザーブしている部分が発火する
- 変更後のデータをアダプター経由でViewに伝える
大体こんな雰囲気だと理解した