2017-02-09 95 views
1

我有Android綁定庫的問題。當我使用屬性更改'_all'時,一切正常,但是當我指定字段時,它不起作用。 我的問題是爲什麼? :)Android綁定 - 屬性更改

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> 

回答

0

的問題是,你正在使用的不是財產name的getName()方法。你應該將它綁定這樣的:

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

之所以_all作品是因爲數據綁定認爲,整個對象是無效的,並重新評估方法,然後爲好。

+0

好的,我注意到了,但是如果我想使用getter? 更改值 - >返回格式(「您的名字是%s」,名稱)的示例 唯一的方法是使用通知所有? – linean

+0

在這種特殊情況下,您需要使用字符串格式:'@ {@ string/yourName(name)}'。但是如果你傳遞參數,它也會使方法無效,所以你可以使用:'@ {MyStringFormatter.yourName(user.name)}' –