Androidのバインディングが概念レベルのライブデータと互換性があるかどうかは疑問でした。 単純なタスクがあります:ボタンをクリックした後にコールサーバー。 だから私の見解で、私はAndroidアーキテクチャのコンポーネントとAndroidのバインディングとLiveData
android:onClick="@{viewmodel::onOrderButtonClick}"
を持っているし、適切onOrderButtonClick(ビュー)メソッドをViewModelにに定義されています。 しかし、LiveData経由でサーバコールを行うには、私のFragmentリファレンス(observe()メソッドは、最初のパラメータとしてLifecycleOwnerインスタンスが必要です)が必要です。 もちろん、ViewModelでfragmentへの参照を保持することはできません。 ここにパターンは何ですか?私は本当にフラグメントクラス内のすべてのイベントメソッドを実装し、それらをビューモデルクラスに委譲する必要がありますか?
ビューモデルに 'onOrderButtonClick()'を付けません。 IMHO、コントローラまたはプレゼンターのアクションであり、ビューモデルのアクションではありません。 – CommonsWare
@CommonsWare、私はあなたがアンドロイドバインディングを使用するときはそれが唯一のオプションだと思う。 – Marcin
いいえあなたはどんなオブジェクトでもバインドすることができます。ビューモデルをバインドする場合(ウィジェットを埋め込むため、場合によっては双方向バインディングを介して出力を受け取るため)、コントローラ/プレゼンターオブジェクト(イベント用)をバインドする場合は、これを歓迎します。両方をレイアウトに定義し、両方に対応する 'set ...()'メソッドを呼び出すだけです。 – CommonsWare