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>
私はそれに気付きましたが、ゲッターを使用したい場合はどうしますか? 値を変更する例 - >戻り値の形式( "あなたの名前は%s"、名前); 唯一の方法はnotify allを使用することですか? – linean
その場合、文字列の書式設定を使用したいと思うでしょう: '@ {@ string/yourName(name)}'。しかし、引数を渡すと、メソッドも無効になるので、次のように使用できます。 '@ {MyStringFormatter.yourName(user.name)}' –