Android绑定 - 属性更改

时间:2017-02-09 12:32:17

标签: android android-layout data-binding android-databinding

我的Android绑定库有问题。当我使用属性更改' _all'一切正常,但是当我指定字段时它不起作用。 我的问题是为什么? :)

public class Person extends BaseObservable{
private String name;

@Bindable
public String getName(){
    return this.name;
}

//IT WORKS
public void setName(String name){
    this.name = name;
    notifyPropertyChanged(BR._all); //<- difference
}

//IT DONT WORK
public void setSurname(String name){
    this.name = name;
    notifyPropertyChanged(BR.name); //<- difference
}

我的xml文件:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
    <variable
        name="person"
        type="com.myapp.Person" />
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{person.getName()}" />

</LinearLayout>
</layout>

1 个答案:

答案 0 :(得分:0)

问题是您使用方法getName()而不是属性name。你应该像这样绑定它:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{person.name}" />

_all起作用的原因是因为数据绑定认为整个对象都是无效的,然后也是重新评估的方法。