学习记录贴-- 新建ViewModel,初认识

新建一个空的ViewModel对象


public class MainViewModel extends AndroidViewModel implements LifecycleObserver {
    // TODO: Implement the ViewModel

    public MutableLiveData mTextContent = new MutableLiveData<>("1");
    public ObservableField 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 create(@NonNull Class modelClass) {
    if (modelClass.isAssignableFrom(MainViewModel.class)) {
        return (T) new MainViewModel(BaseApplication.getsIntance(), model);
    }
    return null;
}

}
···

你可能感兴趣的:(学习记录贴-- 新建ViewModel,初认识)