文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-07-05 11:26

关注

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

Model

public abstract class BaseModel {}

Presenter

public abstract class BasePresenter<M,V> {    public M mIModle;    public V mIView;    public void attachV(V v){        this.mIView = v;        if (mIModle == null) {            mIModle = createModel();        }    }    //当View被销毁掉时删除Presenter层对View层的引用    public void detachV(){        mIView = null;    }    public abstract M createModel();}

View

public interface IBaseView {}
@SuppressLint("Registered")public abstract class BaseMvpActivity<P extends BasePresenter> extends AppCompatActivity implements IBaseView{    public P mPresenter;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (mPresenter == null) {            mPresenter = createPresenter();        }        mPresenter.attachV(this);    }    //当View被销毁掉时删除Presenter层对View层的引用    @Override    protected void onDestroy() {        super.onDestroy();        mPresenter.detachV();    }    public abstract P createPresenter();}

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

Example

public interface ExampleDataSource {    interface OnExampleFinishListener{        void loading();        void onSuccess();        void onError();    }    void load(OnExampleFinishListener listener);}

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

public class ExampleModel extends BaseModel implements ExampleDataSource {        @Override    public void load(final OnExampleFinishListener listener) {        //加载中状态        listener.loading();        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                //获取成功后进行回调                listener.onSuccess();            }        },2000);    }}

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

public interface ExampleContract extends IBaseView {    interface ExamplePresent {        void loadData();    }    interface ExampleView {        void loadResult(String result);        void showLoading();        void loadFinish();    }}

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

public class ExamplePresenter extends BasePresenter<ExampleModel,ExampleContract.ExampleView> implements ExampleContract.ExamplePresent,ExampleDataSource.OnExampleFinishListener{    @Override    public void loadData() {        mIModle.load(this);    }    @Override    public void loading() {        mIView.showLoading();    }    @Override    public void onSuccess() {        mIView.loadResult("成功");        mIView.loadFinish();    }    @Override    public void onError() {    }    @Override    public ExampleModel createModel() {        return new ExampleModel();    }}

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

public class MainActivity extends BaseMvpActivity<ExamplePresenter> implements ExampleContract.ExampleView {    private TextView tvName;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tvName = findViewById(R.id.tv_name);        //加载数据        mPresenter.loadData();    }    @Override    public ExamplePresenter createPresenter() {        return new ExamplePresenter();    }    //返会数据结果    @Override    public void loadResult(String result) {        tvName.setText(result);    }    //加载过程    @Override    public void showLoading() {        tvName.setText("正在加载,请稍等。。。");    }    //加载结束    @Override    public void loadFinish() {    }}

到此,关于“Android如何简单封装一个MVP基类”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯