4

Android バインディングが概念レベルでライブ データと互換性があるかどうか疑問に思っていました。簡単なタスクがあります。ボタンがクリックされた後にサーバーを呼び出します。だから私の見解では、

android:onClick="@{viewmodel::onOrderButtonClick}"

適切な onOrderButtonClick(View) メソッドが ViewModel で定義されています。しかし、LiveData 経由でサーバーを呼び出すには、Fragment 参照が必要です (observe() メソッドには、最初のパラメーターとして LifecycleOwner インスタンスが必要です)。もちろん、ViewModel でフラグメントへの参照を保持することはできません。ここのパターンは何ですか?すべてのイベント メソッドをフラグメント クラスに実装し、それらをビュー モデル クラスにデリゲートする必要はありますか?

4

1 に答える 1

1

掘り下げた後、悪いニュースと良いニュースがあります。悪いニュースは、とにかくフラグメントを使用する必要があることです (フラグメントには、各 livedata イベントのコードが常に存在します)。良い点は、比較的クリーンに実行できることです。

  1. フラグメントからビュー モデルに getOrderObservable() を呼び出します。ビューモデルの ctor で作成された MutableLiveData<> を返します。
  2. 次に、そのオブザーバブルでobserve()を呼び出します ビューモデルの onOrderButtonClick()
  3. ビューモデルの onOrderButtonClick() では、 setValue() を呼び出すだけです

    私の意見では、そのソリューションはフラグメント内のコードの量を最小限に抑えます。それでも、ネットワーク呼び出しの実行と結果の処理を分離するのはそれほど洗練されていないように見えます

于 2017-08-11T11:56:23.140 に答える