我认为 android 没有为此推荐任何最佳实践。我建议您使用使用更干净且更少样板代码的方法。
如果您正在使用 android 数据绑定LiveData
您可以采用以下方法:
你的 POJO 对象看起来像这样
public class User extends BaseObservable {
private String firstName;
private String lastName;
@Bindable
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
notifyPropertyChanged(BR.firstName);
}
@Bindable
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
notifyPropertyChanged(BR.lastName);
}
}
所以你已经有了一个类,只要它的属性发生变化就会发出通知。因此,您可以在 MutableLiveData 中使用此属性更改回调来通知其观察者。您可以为此创建一个自定义 MutableLiveData
public class CustomMutableLiveData<T extends BaseObservable>
extends MutableLiveData<T> {
@Override
public void setValue(T value) {
super.setValue(value);
//listen to property changes
value.addOnPropertyChangedCallback(callback);
}
Observable.OnPropertyChangedCallback callback = new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
//Trigger LiveData observer on change of any property in object
setValue(getValue());
}
};
}
然后您需要做的就是在视图模型中使用此 CustomMutableLiveData 而不是 MutableLiveData
public class InfoViewModel extends AndroidViewModel {
CustomMutableLiveData<User> user = new CustomMutableLiveData<>();
-----
-----
因此,通过这样做,您可以通知视图和 LiveData 观察者,而无需对现有代码进行少量更改。希望能帮助到你