"データロードのトリガ"は、プレゼンテーションロジックの一部です。したがって、これはViewModelに属している必要があります。
ネットワークロジックなどの「データがどのように読み込まれるか」に関する詳細は、ViewModelレイヤに属しません。すでにRxJavaを使用しているので、Retrofitを使用することを強くお勧めします。
rx.Observable
とdatabinding.ObservableField
は非常によく似ていますので、1つの形式から別の形式に変換できます。私はあなたがこれを行うことを可能にするlibraryを書いています。実装については、FieldUtils.javaを参照してください。
いずれかの方法は、あなたがDataService
インタフェース/クラスを持っていると仮定すると:
public interface DataService {
Observable<String> loadSomeData();
}
を次のように、あなたのViewModelを構築することができます:
public class ExampleViewModel {
ObservableField<String> title;
public ExampleViewModel(DataService dataService) {
this.title = FieldUtils.toField(dataService.loadSomeData());
}
}
を次に、あなたはデータバインディング使用して、あなたのビューでこれを表示することができます構文
<TextView
android:text="@{viewModel.title}" />
最近、私はRxJava wi MVVM。私はRetrofitを使ってGithubからイベントのリストをロードしてRecyclerViewに表示するアプリケーションを示した。これはMVVMに実装されています。
記事へのリンク: MVVM using RxJava + Data Binding example: Loading data using Retrofit
もロードインジケータとエラーを示して、より複雑な例:DataLoadingViewModel.javaを。
ありがとうございます。感謝します。悲しいことに、私はそれを自分で難しい方法で習得しなければなりませんでした(他のプロジェクトを勉強するのは数日しかかかりませんでした)。回答に戻ると、私は実際にRxJavaで自分のプロジェクトでRetrofitを使用しています。私は、ViewModelにデータをロードする必要があることを理解しており、バインディングはそこに設定されています。しかし、たとえば、ビュー(アクティビティ)でRecyclerViewを設定することが適切かどうかはわかりません。また、ObservableFieldの代わりに@Bindableを使用するのはなぜですか(少なくとも私にとっては同じように見えますが)。もう一度ありがとうございます:) – Bartando