2つの違いは何ですか?Androidデータバインディング:BindingAdapterとInverseBindingAdapterの比較
いつどちらか一方を使用する必要がありますか?
私がBindingAdapter
を定義するとき、逆を作成する必要がありますか?
2つの違いは何ですか?Androidデータバインディング:BindingAdapterとInverseBindingAdapterの比較
いつどちらか一方を使用する必要がありますか?
私がBindingAdapter
を定義するとき、逆を作成する必要がありますか?
The Busy Coder's Guide to Android Developmentから、自分自身を引用:
双方向結合作品をうまく 方法は、あなたが関連付けられているウィジェットのゲッターとセッター でアップだけでなくモデルラインにデータを格納する場合に。
CompoundButton
はboolean
を受け入れboolean
とsetChecked()
を返すisChecked()
方法を持っているとして、Switch
ようCompoundButton
のcheckedプロパティ でうまく動作 モデルでboolean
フィールド。
BindingAdapter
を使用すると、データと のタイプとプロパティの間に他のマッピングを作成できますが、従来のモデル - >ビューバインディングの場合にのみ使用できます。 同じことを逆の方向に行うには、 をInverseBindingAdapter
にします。この名前からわかるように、 はBindingAdapter
と同じ基本的な役割を果たしますが、逆方向には というデータをウィジェットから取り出し、カスタム コードを使用してモデル用に準備します。ここで、「モデル用に準備する」とは、 モデルの場合、セッターのデータタイプを 、Observable
フィールドに変換することを意味します。これはかなり珍しいことです。
一部の場所で使用されている例は、「
float
をEditText
に結び付けたいのですが?InverseBindingAdapter
は次のようになります:
@InverseBindingAdapter(attribute = "android:text")
public static float getFloat(EditText et) {
try {
return(Float.parseFloat(et.getText().toString()));
}
catch (NumberFormatException e) {
return(0.0f); // because, um, what else can we do?
}
}
問題がある場合
snicklefritz
のように、有効な 浮動小数点数ではない何かでユーザーの種類。parseFloat()
は でNumberFormatException
と失敗します。 は、のデータ入力が無効であることをユーザーに知らせる必要があります。ただし、双方向データバインディングでは がサポートされていません。代わりにデフォルト値(0.0f
)がモデル に渡されます。だから、
、あなたの質問に答えるために:
2つの違いは何ですか?
BindingAdapter
データ型とView
セッターは、データバインディングが独自に処理する方法を知っているものではない性質を取り込むことができます。
InverseBindingAdapter
は、データ型とView
ゲッターがデータバインディングでどのように処理するかを知っているものではない、双方向バインディングでビューモデルを作成するのに役立ちます。
いつどちらか一方を使用する必要がありますか? BindingAdapterを定義するとき、逆を作成する必要がありますか?
ご希望のデータの種類(例えば、float
)は、必ずしもデータバインディングは、ウィジェットのプロパティ(例えば、EditText
上android:text
)に記入する方法を知っているものではありませんが、あなたはそれをバインドしたいときBindingAdapter
を使用しますとにかく
あなたはUIでユーザーの変更が自動的にビューモデルを更新ところ、とはあなたが双方向結合をしたい、それを行う場合は、最も可能性の高いあなたは、例えば(プロパティから変換するには、一致InverseBindingAdapter
が必要になりますEditText
のテキスト)を所望のデータタイプ(例えば、float
)に変換する。
非常に有益な回答、ありがとうございます! –