Android のベスト プラクティスに従い、最新の推奨アーキテクチャ コンポーネントを使用しようとしています。これまでの私の試みは、https ://github.com/randroid88/TodayILearned で確認できます。
現在、アプリの機能は非常に限られています。
- ジャーナルエントリをローカルに保存するための Room データベースがあります。
- すべてのエントリをリストする1 つのフラグメントHomeFragment 。
- 新しいエントリを作成する別のフラグメントEntryEditorFragment 。
- リポジトリ経由でデータを更新するViewModel、 EntryViewModel 。
問題は、現在 HomeFragment だけが EntryViewModel にアクセスできることです。
したがって、現在の設計では、新しいエントリ テキストを EntryEditorFragment から HomeFragment に引数バンドルを介して渡し (新しいナビゲーション アーキテクチャ コンポーネントのSafeArgsを使用)、次に HomeFragment が EntryViewModel を介して新しいエントリを作成します。
val safeArgs = HomeFragmentArgs.fromBundle(arguments!!)
savePossibleNewEntry(safeArgs.entryText)
private fun savePossibleNewEntry(entryText: String) {
entryViewModel!!.insert(EntryCreator().create(entryText))
}
これは気分が悪い。
EntryViewModel にも EntryEditorFragment へのアクセス権があればもっと良いでしょうか?
これを達成するには、このブログで説明されているように、ViewModel のスコープをアクティビティに設定する必要がありますか?
ここでのベストプラクティスは何ですか?