1
@Bindable
public String getFirstName() { 
    return this.firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
    notifyPropertyChanged(BR.firstName);
}

@Bindable
public String getLastName() { 
    return this.lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
    notifyPropertyChanged(BR.lastName);
}


@Bindable({"firstName", "lastName"})
public void getName() { 
    return this.firstName + ' ' + this.lastName; 
}

上記のコードは、Google のサンプル コードからピックアップしました - https://developer.android.com/reference/android/databinding/Bindable

そして、それをXMLのように使用します

<TextView
    android:id="@+id/first_name"
    .....
    android:text="@{myViewModel.firstName}" />
<TextView
    android:id="@+id/last_name"
    .....
    android:text="@{myViewModel.lastName}" />
<TextView
    android:id="@+id/full_name"
    .....
    android:text="@{myViewModel.getName()}" />

私が電話myViewModel.setFirstName("Mohammed");しているときはいつでも、ビューの名を更新していますが、フルネームは更新していません。ドキュメンテーションでさえバグが多く、信頼性がありません。

この問題に関連する他の投稿は、ほとんどがパラメーター化されていない Bindable を扱っているため、あまり役に立ちませんでした。

ドキュメントのこの行に従って

firstName または lastName に変更通知がある場合は常に、name もダーティと見なされます。これは、onPropertyChanged(Observable, int) が BR.name について通知されることを意味するのではなく、name を含むバインディング式がダーティになり、リフレッシュされることのみを意味します。

私も呼び出してみnotifyPropertyChanged(BR.name);ましたが、結果にも影響しません。

4

2 に答える 2