2017-08-08 20 views
2

Androidのバインディングが概念レベルのライブデータと互換性があるかどうかは疑問でした。 単純なタスクがあります:ボタンをクリックした後にコールサーバー。 だから私の見解で、私はAndroidアーキテクチャのコンポーネントとAndroidのバインディングとLiveData

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

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

+0

ビューモデルに 'onOrderButtonClick()'を付けません。 IMHO、コントローラまたはプレゼンターのアクションであり、ビューモデルのアクションではありません。 – CommonsWare

+0

@CommonsWare、私はあなたがアンドロイドバインディングを使用するときはそれが唯一のオプションだと思う。 – Marcin

+0

いいえあなたはどんなオブジェクトでもバインドすることができます。ビューモデルをバインドする場合(ウィジェットを埋め込むため、場合によっては双方向バインディングを介して出力を受け取るため)、コントローラ/プレゼンターオブジェクト(イベント用)をバインドする場合は、これを歓迎します。両方をレイアウトに定義し、両方に対応する 'set ...()'メソッドを呼び出すだけです。 – CommonsWare

答えて

1

いくつかの掘削の後、悪いニュースと良いものがあります。 悪いニュースが 良いものは、それが比較的きれいに行うことができるということである(各livedataイベントのフラグメントでいくつかのコードが常にある)の断片は、とにかく使用しなければならないことである。

  1. コールgetOrderObservable()フラグメントモデルからビューモデルまで。ビューモデルのctorに MutableLiveData <を返します。
  2. そして、ビューモデルに)(onOrderButtonClickで)その観測可能なビューでモデルのonOrderButtonClick(上)(観察
  3. を呼び出すことはちょうど私の意見では解決策がフラグメント内のコードの量をminimalizesことのsetValue()

    を呼び出します。それでも、ネットワークコールを分離して結果を処理することはあまり優雅ではないようです。

+0

- これをもう少し説明してもらえますか?私はまた、Databinding、Livedata、ViewModelがどのように連携し、MVVMアーキテクチャを維持しているのか把握しようとしています。これの大きなパズルの1つはonclickです - あなたはあなたが見つけたものを説明することができれば、私は新しいインテントなどを立ち上げるにはどうすればいいでしょうか。 – Sandeep

+0

@Sandeep - 具体的にしてください – Marcin

関連する問題