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

新建一个空的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;
}

}
···

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。