2017-02-09 16 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

私はそれに気付きましたが、ゲッターを使用したい場合はどうしますか? 値を変更する例 - >戻り値の形式( "あなたの名前は%s"、名前); 唯一の方法はnotify allを使用することですか? – linean

+0

その場合、文字列の書式設定を使用したいと思うでしょう: '@ {@ string/yourName(name)}'。しかし、引数を渡すと、メソッドも無効になるので、次のように使用できます。 '@ {MyStringFormatter.yourName(user.name)}' –

関連する問題