Как Вью подбирает сеттер? - PullRequest
0 голосов
/ 11 марта 2019

У меня есть приложение, использующее привязку данных, в основах которого я следовал этому уроку ниже:

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?

...