第一步:model层搭建:(用于数据的获取)
IModel接口
package com.wei.core.model;
/**
* @author: wangluming
* @date: On 2020/9/29
*/
public interface IModel {
}
IModel接口不需要实现任何方法
两个抽象类
RemotaModel(获取网络数据)
package com.wei.core.model;
/**
* @author: wangluming
* @date: On 2020/9/29
*/
public abstract class RomoteModel implements IModel {
}
LocalModel(获取本地数据:本地数据库,sp存储,本地文件)
package com.wei.core.model;
/**
* @author: wangluming
* @date: On 2020/9/29
*/
public abstract class LocalModel implements IModel {
}
第二步:Repository层搭建:(用于封装Model层)
package com.wei.core.repository;
import androidx.lifecycle.LifecycleOwner;
import com.wei.core.model.IModel;
/**
* @author: wangluming
* @date: On 2020/9/29
*/
public abstract class Repository<T extends IModel> {
protected LifecycleOwner owner;
private T mModel;
public Repository(LifecycleOwner _owner) {
owner = _owner;
mModel = createModel();
}
protected abstract T createModel();
public T getmModel() {
return mModel;
}
}
抽象类Repository泛型继承自IModel接口里面可以传入IModel接口的两个实现类RemotaModel LocalModel
第三步:viewModel层搭建:(业务逻辑实现)
package com.wei.core.viewmodel;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModel;
import com.wei.core.repository.Repository;
import java.util.HashMap;
import java.util.Map;
/**
* @author: wangluming
* @date: On 2020/9/29
*/
public class BaseViewModel extends ViewModel implements LifecycleObserver {
protected LifecycleOwner owner;
protected Map<String, Repository> repositoryMap;
public BaseViewModel(LifecycleOwner _owner) {
owner = _owner;
repositoryMap = new HashMap<>();
}
protected void registerRepository(String key,Repository repository){
if (repositoryMap.containsKey(key)){
return;
}
repositoryMap.put(key,repository);
}
protected void unRegisterRepository(String key){
if (repositoryMap.containsKey(key)){
repositoryMap.remove(key);
}
}
protected <SubRepository extends Repository> SubRepository getRepository(String key,Repository repository){
if (repositoryMap.containsKey(key)){
return (SubRepository) repositoryMap.get(key);
}
return null;
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void disConnectOwner(){
if (repositoryMap!=null){
repositoryMap.clear();
repositoryMap = null;
}
}
}
获取不同数据仓库的对象并从中获取数据,继承ViewModel 以及 实现LifecycleObserver接口(viewModel层与view层生命周期同步,避免造成内存泄漏)用一个Map集合来存放不同类型的数据仓库,用时直接从集合中取出相应的数据。
第四步:View层搭建:(用于数据的展示)
BaseActivity
package com.wei.core.view;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import com.wei.core.viewmodel.BaseViewModel;
/**
* @author: wangluming
* @date: On 2020/9/29
*/
public abstract class BaseActivity<Binding extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity {
protected Binding binding;
protected VM vm;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, getLayout());
vm = createVM();
initBinding();
initData(savedInstanceState);
initEvent();
}
protected abstract VM createVM();
protected abstract void initEvent();
protected abstract void initData(Bundle savedInstanceState);
protected abstract void initBinding();
protected abstract int getLayout();
protected void showMsg(String msg){
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
BaseFragment
package com.wei.core.view;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import androidx.fragment.app.Fragment;
import com.wei.core.viewmodel.BaseViewModel;
/**
* @author: wangluming
* @date: On 2020/9/29
*/
public abstract class BaseFragment<Binding extends ViewDataBinding, VM extends BaseViewModel> extends Fragment {
protected Binding binding;
protected VM vm;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, getLayout(), container, false);
View root = binding.getRoot();
vm = createVM();
initBinding();
return root;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
initEvent();
}
protected abstract void initEvent();
protected abstract void initData();
protected abstract void initBinding();
protected abstract VM createVM();
protected abstract int getLayout();
}
版权声明:本文为m0_46322939原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。