Android如何简单封装一个MVP基类

其他教程   发布日期:2023年08月22日   浏览次数:433

这篇文章主要介绍“Android如何简单封装一个MVP基类”,在日常操作中,相信很多人在Android如何简单封装一个MVP基类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android如何简单封装一个MVP基类”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Model

  1. public abstract class BaseModel {
  2. }

Presenter

  1. public abstract class BasePresenter<M,V> {
  2. public M mIModle;
  3. public V mIView;
  4. public void attachV(V v){
  5. this.mIView = v;
  6. if (mIModle == null) {
  7. mIModle = createModel();
  8. }
  9. }
  10. //当View被销毁掉时删除Presenter层对View层的引用
  11. public void detachV(){
  12. mIView = null;
  13. }
  14. public abstract M createModel();
  15. }

View

  1. public interface IBaseView {
  2. }
  1. @SuppressLint("Registered")
  2. public abstract class BaseMvpActivity<P extends BasePresenter> extends AppCompatActivity implements IBaseView{
  3. public P mPresenter;
  4. @Override
  5. protected void onCreate(@Nullable Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. if (mPresenter == null) {
  8. mPresenter = createPresenter();
  9. }
  10. mPresenter.attachV(this);
  11. }
  12. //当View被销毁掉时删除Presenter层对View层的引用
  13. @Override
  14. protected void onDestroy() {
  15. super.onDestroy();
  16. mPresenter.detachV();
  17. }
  18. public abstract P createPresenter();
  19. }

这里Mode和View的基类里什么都没有,其实我们知道一般封装基类的目录是为了简化项目代码,提高开发效率。所以这里两个基类里面一般根据我们自己需求去实现。

Example

  1. public interface ExampleDataSource {
  2. interface OnExampleFinishListener{
  3. void loading();
  4. void onSuccess();
  5. void onError();
  6. }
  7. void load(OnExampleFinishListener listener);
  8. }

ExampleDataSource接口实现的是ExampleModel,而在它的内部接口OnExampleFinishListener是Model层的回调接口,它们真正实现是在Presenter层。对于获取到数据后(成功或失败)就是通过这个回调接口将数据传递Presenter层。

  1. public class ExampleModel extends BaseModel implements ExampleDataSource {
  2. /**
  3. * model层主要用来进行数据存储操作,例如:数据读写和网络请求。
  4. * 这里进行下模拟耗时操作
  5. * @param listener
  6. */
  7. @Override
  8. public void load(final OnExampleFinishListener listener) {
  9. //加载中状态
  10. listener.loading();
  11. new Handler().postDelayed(new Runnable() {
  12. @Override
  13. public void run() {
  14. //获取成功后进行回调
  15. listener.onSuccess();
  16. }
  17. },2000);
  18. }
  19. }

这里我们在Model层模拟下耗时操作(例如:网络请求),然后将得到的数据结果通过回调方法传递到Presenter层。

  1. public interface ExampleContract extends IBaseView {
  2. interface ExamplePresent {
  3. void loadData();
  4. }
  5. interface ExampleView {
  6. void loadResult(String result);
  7. void showLoading();
  8. void loadFinish();
  9. }
  10. }

这里我们将Presenter接口和View接口放在一个类中,这样可以使我们能够清晰的看到在Presenter层和View层中有哪些功能,方便我们以后维护。

  1. public class ExamplePresenter extends BasePresenter<ExampleModel,ExampleContract.ExampleView> implements ExampleContract.ExamplePresent,ExampleDataSource.OnExampleFinishListener{
  2. @Override
  3. public void loadData() {
  4. mIModle.load(this);
  5. }
  6. @Override
  7. public void loading() {
  8. mIView.showLoading();
  9. }
  10. @Override
  11. public void onSuccess() {
  12. mIView.loadResult("成功");
  13. mIView.loadFinish();
  14. }
  15. @Override
  16. public void onError() {
  17. }
  18. @Override
  19. public ExampleModel createModel() {
  20. return new ExampleModel();
  21. }
  22. }

从Presenter层我们可以看出,首先调用Model层的接口获取数据进行一些逻辑操作然后通过View层接口实现数据的展示。

  1. public class MainActivity extends BaseMvpActivity<ExamplePresenter> implements ExampleContract.ExampleView {
  2. private TextView tvName;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. tvName = findViewById(R.id.tv_name);
  8. //加载数据
  9. mPresenter.loadData();
  10. }
  11. @Override
  12. public ExamplePresenter createPresenter() {
  13. return new ExamplePresenter();
  14. }
  15. //返会数据结果
  16. @Override
  17. public void loadResult(String result) {
  18. tvName.setText(result);
  19. }
  20. //加载过程
  21. @Override
  22. public void showLoading() {
  23. tvName.setText("正在加载,请稍等。。。");
  24. }
  25. //加载结束
  26. @Override
  27. public void loadFinish() {
  28. }
  29. }

以上就是Android如何简单封装一个MVP基类的详细内容,更多关于Android如何简单封装一个MVP基类的资料请关注九品源码其它相关文章!