MVVM框架+RXjava封装使用
目录
总结来说rxjava中包含观察者和被观察者,这是将接口IModel一个转化实现在BaseModel中,而IVewModel是通过对生命周期的运用实现早BaseViewModel中有对内存泄露的一个操作,initModel中的做了一个反射获取数据,对其观察者的一个封装,比如说如果当你运用接口可以对你当前的数据进行一个监听如果出现问题会提出警告。
mvvm是model,view,viewmodel,而model是负责获取数据,view负责展示,至于viewmodel是负责业务逻辑,mvvm实在mvp的基础上建立的一套解耦性更强的框架,view和viewmodel的对象持有关系的是view持有viewmodel的对象viewmodel不能持有view层的对象,因为viewmodel的生命周期要长于activity,mvvm基于databinding,livedata,lifecycle,viewmodel等框架进行搭建的,lifecycle是基于注解器以及观察者模式进行生命周期绑定的框架可以用来关联activity或者fragment声明周期方法从而达到一个自动调用生命周期方法关联的方法的效果,livedata是基于lifecycle框架实现的基于观察者的数据驱动框架,在mvvm中可以用来vm层与view层通信,databinding框架是用来实现数据ui的双向绑定
IModel的封装
-
public interface IModel {
-
RequestBody createBody(HashMap<String,Object> map);
-
Observable<BaseEntity> changeFunc(Observable< ? extends BaseEntity> observable);
-
-
}
BaseModel
-
public abstract class BaseModel implements IModel{
-
-
public RequestBody createBody(HashMap<String, Object> map) {
-
return RequestBody.create(MediaType.parse("application/json"),new Gson().toJson(map));
-
-
}
-
-
-
public Observable<BaseEntity> changeFunc(Observable<? extends BaseEntity> observable) {
-
return observable.map(new ChangeFunction<>());
-
}
-
}
IViewModel
-
public interface IViewModel extends LifecycleObserver {
-
-
-
void onCreate();
-
-
void onDestroy();
-
-
}
BaseViewModel
-
public abstract class BaseViewModel<M extends BaseModel> extends ViewModel implements IViewModel, Observer<BaseEntity> {
-
protected M m;
-
protected CompositeDisposable compositeDisposable;
-
private UIChange uiChange;
-
-
-
public void onCreate() {
-
compositeDisposable = new CompositeDisposable();
-
initModel();
-
}
-
-
-
public void onDestroy() {
-
compositeDisposable.dispose();
-
compositeDisposable.clear();
-
}
-
-
private void initModel(){
-
ParameterizedType parameterizedType = (ParameterizedType)getClass().getGenericSuperclass();
-
Type[] types = parameterizedType.getActualTypeArguments();
-
Class clazz = (Class) types[0];
-
try {
-
m = (M) clazz.newInstance();
-
} catch (IllegalAccessException e) {
-
e.printStackTrace();
-
} catch (InstantiationException e) {
-
e.printStackTrace();
-
}
-
}
-
-
-
protected abstract void result(BaseEntity baseEntity);
-
-
-
public void onSubscribe( { Disposable d)
-
compositeDisposable.add(d);
-
showDialog();
-
}
-
-
-
public void onNext( { BaseEntity baseEntity)
-
result(baseEntity);
-
}
-
-
-
public void onError( { Throwable e)
-
showMsg("问题出错:" e.getMessage());
-
}
-
-
-
public void onComplete() {
-
hideDialog();
-
}
-
-
public UIChange getUiChange(){
-
if (uiChange == null){
-
uiChange = new UIChange();
-
}
-
return uiChange;
-
}
-
-
protected void showDialog(){
-
getUiChange().setShowDialogObservable("" System.currentTimeMillis());
-
-
}
-
protected void hideDialog(){
-
getUiChange().setHideDialogObservable("" System.currentTimeMillis());
-
}
-
protected void finishPage(){
-
getUiChange().setFinishActObServAble("" System.currentTimeMillis());
-
}
-
protected void showMsg(String msg){
-
getUiChange().setShowMsgObservable(msg);
-
}
-
-
protected void startPage(HashMap<String,Object> map){
-
getUiChange().setStartPageObServAble(map);
-
}
-
-
public class UIChange{
-
private MutableLiveData<String> showDialogObservable = new MutableLiveData<>();
-
private MutableLiveData<String> hideDialogObservable = new MutableLiveData<>();
-
private MutableLiveData<String> showMsgObservable = new MutableLiveData<>();
-
private MutableLiveData<String> finishActObServAble = new MutableLiveData<>();
-
private MutableLiveData<HashMap<String,Object>> startPageObServAble = new MutableLiveData<>();
-
-
public MutableLiveData<String> getShowDialogObservable() {
-
return showDialogObservable;
-
}
-
-
public void setShowDialogObservable(String showDialogObservable) {
-
this.showDialogObservable.setValue(showDialogObservable);
-
}
-
-
public MutableLiveData<String> getHideDialogObservable() {
-
return hideDialogObservable;
-
}
-
-
public void setHideDialogObservable(String hideDialogObservable) {
-
this.hideDialogObservable.setValue(hideDialogObservable);
-
}
-
-
public MutableLiveData<String> getShowMsgObservable() {
-
return showMsgObservable;
-
}
-
-
public void setShowMsgObservable(String showMsgObservable) {
-
this.showMsgObservable.setValue(showMsgObservable);
-
}
-
-
public MutableLiveData<String> getFinishActObServAble() {
-
return finishActObServAble;
-
}
-
-
public void setFinishActObServAble(String finishActObServAble) {
-
this.finishActObServAble.setValue(finishActObServAble);
-
-
-
}
-
-
public MutableLiveData<HashMap<String, Object>> getStartPageObServAble() {
-
return startPageObServAble;
-
}
-
-
public void setStartPageObServAble(HashMap<String, Object> startPageObServAble) {
-
this.startPageObServAble.setValue(startPageObServAble);
-
}
-
}
-
}
IView
-
public interface IView {
-
void showMsg(String msg);
-
void hideDialog();
-
void showDialog();
-
void finishPage();
-
void startPage(Class clazz, Bundle bundle);
-
-
int bindLayout();
-
void initViewModel();
-
-
void bindDataBinding();
-
int initVerable();
-
-
-
}
BaseActivity
-
public abstract class BaseActivity<V extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity implements IView {
-
-
protected V v;
-
protected VM vm;
-
-
-
protected void onCreate( { .jetbrains.annotations.Nullable Bundle savedInstanceState)
-
super.onCreate(savedInstanceState);
-
initViewModel();
-
getLifecycle().addObserver(vm);
-
vm.getUiChange().getHideDialogObservable().observe(this,hideDialogObServer);
-
vm.getUiChange().getFinishActObServAble().observe(this,finishDialogObServer);
-
vm.getUiChange().getShowDialogObservable().observe(this,showDialogObServer);
-
vm.getUiChange().getShowMsgObservable().observe(this,showMsgObServer);
-
vm.getUiChange().getStartPageObServAble().observe(this,startPageObServer);
-
bindDataBinding();
-
v.setVariable(initVerable(),vm);
-
-
}
-
-
-
protected void onDestroy() {
-
super.onDestroy();
-
-
vm.getUiChange().getHideDialogObservable().removeObserver(hideDialogObServer);
-
vm.getUiChange().getFinishActObServAble().removeObserver(finishDialogObServer);
-
vm.getUiChange().getShowDialogObservable().removeObserver(showDialogObServer);
-
vm.getUiChange().getShowMsgObservable().removeObserver(showMsgObServer);
-
vm.getUiChange().getStartPageObServAble().removeObserver(startPageObServer);
-
getLifecycle().removeObserver(vm);
-
v.unbind();
-
}
-
-
private Observer<String> showDialogObServer = new Observer<String>() {
-
-
public void onChanged(String o) {
-
showDialog();
-
}
-
-
};
-
-
private Observer<String> hideDialogObServer = new Observer<String>() {
-
-
public void onChanged(String o) {
-
hideDialog();
-
}
-
-
};
-
-
private Observer<String> finishDialogObServer = new Observer<String>() {
-
-
public void onChanged(String o) {
-
finishPage();
-
}
-
-
};
-
-
private Observer<String> showMsgObServer = new Observer<String>() {
-
-
public void onChanged(String o) {
-
showMsg(o);
-
}
-
-
};
-
-
private Observer<HashMap<String,Object>> startPageObServer = new Observer<HashMap<String,Object>>() {
-
-
public void onChanged(HashMap<String, Object> map) {
-
Class clazz = (Class) map.get(UIFiled.PAGECLAZZ);
-
Object o = map.get(UIFiled.PAGEBUNDLE);
-
Bundle bundle = null;
-
if (o != null)
-
bundle = (Bundle) o;
-
startPage(clazz,bundle);
-
}
-
};
-
-
-
public void showMsg(String msg) {
-
ToastUtils.showShort(msg);
-
}
-
-
-
public void hideDialog() {
-
-
}
-
-
-
public void showDialog() {
-
-
}
-
-
-
public void finishPage() {
-
finish();
-
}
-
-
-
public void startPage(Class clazz, Bundle bundle) {
-
Intent intent = new Intent(this,clazz);
-
if (bundle != null){
-
intent.putExtras(bundle);
-
}
-
startActivity(intent);
-
}
-
-
-
public void initViewModel() {
-
ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
-
Type[] types = parameterizedType.getActualTypeArguments();
-
Class clazz = (Class) types[1];
-
vm = (VM) new ViewModelProvider(this,
-
new ViewModelProvider.NewInstanceFactory()).get(clazz);
-
}
-
-
-
public void bindDataBinding() {
-
v = DataBindingUtil.setContentView(this,bindLayout());
-
}
-
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjjggb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24