【发布时间】:2018-09-05 19:05:33
【问题描述】:
当使用 ViewModel 时,View 会观察 ViewModel。它必须注册为观察者。在 Google 的 official tutorial 中,此注册被委托给 LiveData 对象的 observe() 方法。
public class MyViewModel extends ViewModel {
private MutableLiveData<List<User>> users;
public LiveData<List<User>> getUsers() {
if (users == null) {
users = new MutableLiveData<List<Users>>();
loadUsers();
}
return users;
}
private void loadUsers() {
// Do an asynchronous operation to fetch users.
}
}
public class MyActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
// Create a ViewModel the first time the system calls an activity's onCreate() method.
// Re-created activities receive the same MyViewModel instance created by the first activity.
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
model.getUsers().observe(this, users -> {
// update UI
});
}
}
getUsers() 方法返回 LiveData 对象本身。它的observe() 方法用于注册观察者。 View 没有观察到ViewModel,而是它的实现的一部分。
现在这是最佳实践,当与ViewModels 合作时,不是观察自己,而是以LiveData 对象的形式观察它们的部分实现?还是这是低质量的介绍?
【问题讨论】:
标签: android observer-pattern android-livedata android-viewmodel