アンドロイドデータバインディングでMVVMパターンを使用しようとしています。 私は、edittextフィールドに、LocationTypeモデルオブジェクトでobservablefieldを介してモデルにバインドして入力すると、同じテキストを表示するedittextとtextviewを持っています。Android双方向データバインディング、テキストビューが更新されない
私は、アプリケーションを起動すると、両方のフィールドが "hello"に設定されています。 しかし、edittextfieldをタイプすると、textviewは更新されません。モデルオブジェクトは、デバッグで見られるように正しく更新されます。
私が使用:モデルとちょうどいくつかのテキストに設定し、このフィールドを使用してXMLを更新を使用して
observablefield<String>
ドロップ。意図したとおりに動作します。
モデル:
public class LocationType {
private String locationType;
public String getLocationType() {
return locationType;
}
public void setLocationType(String locationType) {
this.locationType = locationType;
}
}
モデルビュー:
public class LocationTypeViewModel extends BaseObservable {
@Bindable
private ObservableField<LocationType> locationTypeObservableField = new ObservableField<>();
private Context context;
LocationType locationType;
public LocationTypeViewModel(Context context) {
this.context = context;
locationType = new LocationType();
locationType.setLocationType("Hello");
locationTypeObservableField.set(locationType);
}
public ObservableField<LocationType> getLocationTypeObservableField() {
Log.d("CALLED GET", locationType.getLocationType());
return locationTypeObservableField;
}
}
XML:
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
<variable
name="viewModel"
type="fragment.LocationType.viewmodel.LocationTypeViewModel"/>
</data>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="@{viewModel.locationTypeObservableField.locationType}"
android:id="@+id/edittext1"/>
<TextView
android:layout_below="@+id/edittext1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="@{viewModel.locationTypeObservableField.locationType}"
android:id="@+id/text"
/>
</RelativeLayout>
</layout>
ありがとうございます!私はどのように失われたのか分からない前に@を持っていました。しかし、私はモデルをPOJOとしてどのように持つことができますか? – Morti
LocationTypeオブジェクトにBaseObservableを拡張させることができます。その後、フィールドを変更する際には、BR生成クラスから正しいIDを通知する必要があります。ドキュメントのObservable Objectsをチェックしてください:https://developer.android.com/topic/libraries/data-binding/index.html。そこには相対的な例があります。 –
MVVMパターンを設計するときに行うべきことはありますか?ほとんどの例では、ViewModelはBaseObservableを拡張したものです。 – Morti