У меня есть приложение, использующее привязку данных, в основах которого я следовал этому уроку ниже:
https://www.vogella.com/tutorials/AndroidDatabinding/article.html
Он говорит мне, что я могу работать с геттерами и сеттерами следующим образом:
public class TemperatureData extends BaseObservable {
private String celsius;
public TemperatureData(String celsius) {
this.celsius = celsius;
}
@Bindable
public String getCelsius() {
return celsius;
}
public void setCelsius(String celsius) {
this.celsius = celsius;
notifyPropertyChanged(BR.celsius);
}
или
вы также можете использовать ObservableField и его подкласс для свойств.
Обе опции четко уведомляют мнение об обновлениях.
Но недавно я случайно обнаружил, что представление также захватывает «обычное» поле setter
без какой-либо формы уведомления о присоединенном к нему представлении:
ViewModel
public class StorageMenuViewModel extends AndroidViewModel
{
private String storageName;
// ..
public String getStorageName() {
return storageName;
}
public void setStorageName(String storageName) {
this.storageName = storageName;
}
View
<EditText
android:id="@+id/storage_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Storage name"
android:text="@={viewModel.storageName}"/>
Я пишу отчет о том, как можно уведомлять представление при изменении связанных полей свойств, но после объяснения ObservableField
и notifyPropertyChanged()
я застрял с этим вопросом:
Что означает уведомление вида, ограниченного обычными полями, без notifyPropertyChanged
?