新建一个空的ViewModel对象
public class MainViewModel extends AndroidViewModel implements LifecycleObserver {
// TODO: Implement the ViewModel
public MutableLiveData<String> mTextContent = new MutableLiveData<>("1");
public ObservableField<String> stringObservableField = new ObservableField<>("2");
public MainViewModel(@NonNull Application mApplication) {
super(mApplication);
mTextContent.setValue("hello MutableLiveData in constructor");
stringObservableField.set("hello ObservableField");
}
public void showAlertMesage() {
mTextContent.setValue("showAlertMesage MutableLiveData");
stringObservableField.set("showAlertMesage ObservableField");
}
}
分析1.
扩展AndroidViewModel 而不是ViewModel,因为会自带一个application的引用
viewmodel中可以通过application获得上下文,设置一些变量,比如颜色,visibility,drawable等
分析2:
viewmodel此时是一个单独的类,普通的类,没有发挥威力
使用:
mViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
在Fragment/Activity创建后,可以生成viewmodel
这个就是viewmodel的初认识。
就仅仅是个叫做viewmodel的类,那么如何使用呢?
需要结合DataBinding和livedata
补充一下自定义Factory类
ViewModelProviders.of(this),使用了默认的Factory,
第二个参数是一个factory,继承自ViewModelProvider.Factory
model可以是数据仓库,可以再Factory里面 inject数据仓库
如下
···
public class MyViewModelFactory implements ViewModelProvider.Factory {
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if (modelClass.isAssignableFrom(MainViewModel.class)) {
return (T) new MainViewModel(BaseApplication.getsIntance(), model);
}
return null;
}
}
···