使用livedata的步骤
- 创建一个实例
LiveData
来保存某种类型的数据。这通常在你的ViewModel类内完成
- 创建一个Observer 定义onChanged()方法的对象,该对象 控制LiveData对象保存的数据更改时发生的情况。您通常
Observer
在UI控制器中创建对象,例如activity或fragment。
- 使用该 方法将Observer对象附加到对象。该方法需要一个对象。这将对象订阅到对象,以便通知其更改。您通常将该对象附加到UI控制器中,例如活动或片段.
使用livedata的简单例子
public class NameViewModel extends ViewModel {
// Create a LiveData with a String
private MutableLiveData<String> mCurrentName;
public MutableLiveData<String> getCurrentName() {
if (mCurrentName == null) {
mCurrentName = new MutableLiveData<String>();
}
return mCurrentName;
}
// Rest of the ViewModel...
}
- 在activity或者Fragment中实施监听来更新ui
public class NameActivity extends AppCompatActivity {
private NameViewModel mModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Other code to setup the activity...
// Get the ViewModel.
mModel = ViewModelProviders.of(this).get(NameViewModel.class);
// Create the observer which updates the UI.
final Observer<String> nameObserver = new Observer<String>() {
@Override
public void onChanged(@Nullable final String newName) {
// Update the UI, in this case, a TextView.
mNameTextView.setText(newName);
//注意这里 在MVVM 中不是这样写的 这里只是单行绑定
}
};
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
mModel.getCurrentName().observe(this, nameObserver);
//注意这个地方用没有用Java8的lambda表达式,可以写的更加简练,
}
}
- 更新livedata对象
- 调用setValue(T)示例会导致观察者onChanged()使用该值调用其ui进行刷新。该示例示出了按钮按下,但setValue()还是postValue()可以被调用以更新mName为各种各样的原因,包括响应于网络请求或数据库负荷完成; 在所有情况下,呼叫setValue()
或postValue()
触发观察员并更新UI。
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String anotherName = "John Doe";
mModel.getCurrentName().setValue(anotherName);
}
});
- 下面几个暂时没有看(TODO)
- 扩展livedata对象
- 转换livedata对象
- 合并livedata对象