我知道过去有过像this one这样的讨论。但是,它似乎对我不起作用。这就是我的布局中的内容:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{word.contents}"
android:id="@+id/wordView"/>
<EditText android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/wordInput"
android:text="@={word.contents}"/>
我希望我的TextView在我输入时在EditText中显示更新的文本。但它不会发生。我可以通过实现我自己的Text Watchers来实现它,但我认为数据绑定的全部意义在于避免这样做。我在这里错过了什么吗?我需要做更多吗?我发现有些人建议使数据可观察或可绑定,但我宁愿不弄乱我的模型对象。这是我的gradle依赖:
classpath 'com.android.tools.build:gradle:2.2.3'
我的app gradle有:
dataBinding {
enabled = true
}
和我的MainActivity的onCreate:
MainBinding binding = DataBindingUtil.setContentView(this, R.layout.main);
Word word = new Word("Test Word");
binding.setWord(word);
这里是Word类,一个简单的POJO:
public class Word {
private String contents;
public Word() {
contents = "";
}
public Word(String contents) {
this.contents = contents;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
}
另外,我调试了应用程序,在我的setContents方法中留下了一个断点。我可以看到在更改EditText时,代码在断点处停止,模型实际上发生了变化。它看起来像TextView组件没有得到更新。有什么想法吗?
答案 0 :(得分:1)
您只需在模型类中使用BaseObservable
,即Word
,并通知该属性已更改。
public class Word extends BaseObservable {
public void setContents(String contents) {
this.contents = contents;
notifyPropertyChanged(BR.contents);
}
}
答案 1 :(得分:0)
更新您的Java文件,如
MainBinding binding = DataBindingUtil.setContentView(this, R.layout.main);
Word word = new Word();
word.setContents("Test Word");
binding.setWord(word);
可以更新Word类,
public class Word extends BaseObservable {
private String contents;
public Word() {
contents = "";
}
public Word(String contents) {
this.contents = contents;
}
@Bindable
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
notifyPropertyChanged(BR.contents);
}
}