MVP小白入门,只需5步

简介: 前言:因为公司氛围没有用,一直很火的mvp模式像鬼一样听说过没见过,今天闲来无事了解一下,发现由普通的MVC改起来还是挺行云流水的,但像有些弹窗不知道写在P层还是V层关于MVP的概念我就不详细说了,记住关键的一点就是将view与逻辑分离在谷歌推荐写法下,M层被弱化,数据处理放在了P层1.

前言:因为公司氛围没有用,一直很火的mvp模式像鬼一样听说过没见过,今天闲来无事了解一下,发现由普通的MVC改起来还是挺行云流水的,但像有些弹窗不知道写在P层还是V层
关于MVP的概念我就不详细说了,记住关键的一点就是将view与逻辑分离
在谷歌推荐写法下,M层被弱化,数据处理放在了P层

1.定义一个P接口

public interface BasePresenter {
    boolean something();
}

2.定义一个V接口

public interface BaseView<P extends BasePresenter> {
    void setPresenter(P presenter);
}

3.定义一个合约类管理上述两个接口,Presenter用于定义界面的逻辑与数据,View 用于定义对应的界面显示

public class DateRecordContract {
    interface Presenter extends BasePresenter {
        //获取今日数据
        void getTodayData();
        //获取所有数据
        void getAllData();
        //检查数据是否有效
        void checkData();
        //插入一条数据
        void insertDateBean();
        //开始计时
        void startTiming();
    }

    interface View extends BaseView<Presenter> {
        //显示计时界面
        void startAnim();
        //刷新界面
        void refreshUI(List<DateRecordBean> data);
        //停止计时界面
        void stopAnim();
        //刷新一个界面
        void refreshOneDate(DateRecordBean bean);
        //保存输入的文本
        void saveInputtext(String str);
        //获得当前的文本
        String getCurrenttext();
        //隐藏输入法
        void hideInput();
    }


}

4.定义一个P层实现类,最好放在上面的接口同一个包下

public class DateRecordPresenterImpl implements DateRecordContract.Presenter {
    private DateRecordContract.View view;
    private SharedPreferencesHelper spHelper;

    public DateRecordPresenterImpl(DateRecordContract.View view,SharedPreferencesHelper sp) {
        this.view = view;
        view.setPresenter(this);
        spHelper = sp;
    }

    @Override
    public void getTodayData() {
        //..处理数据
        List<DateRecordBean> list = ...;
        //..通知view刷新界面
        view.refreshUI(list);
    }

    @Override
    public void getAllData() {
        List<DateRecordBean> list = ...;
        //
        view.refreshUI(list);
    }

    @Override
    public void checkData() {

    }

    @Override
    public void insertDateBean() {
        long endTime = System.currentTimeMillis();
        DateRecordBean bean = new DateRecordBean();
        //..数据处理

        //处理完数据后通知view刷新界面
        view.refreshOneDate(bean);
    }

    @Override
    public void startTiming() {
        view.hideInput();
        view.startAnim();

        spHelper.put(SharedPreferencesHelper.isStartTime, true);

        view.saveInputtext(str);
    }
    @Override
    public boolean something() {
        //...自己的处理逻辑
        return isStartRecord;
    }
}

5.定义一个View实现类,根据回调显示UI

public class MainActivity extends AppCompatActivity implements DateRecordContract.View {
private DateRecordPresenterImpl presenter;
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        presenter = new DateRecordPresenterImpl(this,spHelper);
        //通知P层获得今日数据
        presenter.getTodayData();
    }


    @Override
    public void refreshUI(List<DateRecordBean> data) {
        //显示P层处理好的数据
        dapter.addBeans(data);
    }
}

以上就是简单的MVP入门,哪里出问题了直接在合约类查看,还是挺方便,也可以把MainActivity改为Fragment实现View,有些疑问是不知道把Dialog放在哪,目前还是放在了Activity中
2018年9月5日08:02:16

相关文章
|
JSON 搜索推荐 网络协议
玩转curl指令—测试简单的HTTP接口
玩转curl指令—测试简单的HTTP接口
810 0
|
安全 关系型数据库 MySQL
Docker 进阶 发布自己的Docker镜像 将镜像上传到阿里云和Docker Hub
上传自己制作的docker镜像的方法,将docker镜像上传到Docker Hub,阿里云的两种方法,以及上传镜像时可能遇见的问题和解决办法,每一步的详解和上传镜像时的规范。
8430 0
Docker 进阶 发布自己的Docker镜像 将镜像上传到阿里云和Docker Hub
|
消息中间件 测试技术 数据库
消息队列和应用工具产品体系-微服务架构引发的问题
消息队列和应用工具产品体系-微服务架构引发的问题
消息队列和应用工具产品体系-微服务架构引发的问题
|
8月前
|
缓存 NoSQL Linux
Linux系统内存使用优化技巧
交换空间(Swap)的优化 禁用 Swap sudo swapoff -a 作用:这个命令会禁用系统中所有的 Swap 空间。swapoff 命令用于关闭 Swap 空间,-a 参数表示关闭 /etc/fstab 文件中配置的所有 Swap 空间。 使用场景:在高性能应用场景下,比如数据库服务器或高性能计算服务器,禁用 Swap 可以减少磁盘 I/O,提高系统性能。
303 3
|
7月前
|
人工智能 运维 Cloud Native
2025年国内工单系统推荐:技术架构、场景适配与行业实践
分析了智能化升级、大数据驱动、云原生架构及全渠道融合四大技术趋势,从功能适配性、易用性、集成能力、安全性和性价比五个维度指导企业选型,并推荐合力亿捷等三家系统的优劣对比,结合电商和制造行业的实际案例,帮助企业提升客户服务水平与竞争力。
529 11
2025年国内工单系统推荐:技术架构、场景适配与行业实践
|
运维 监控 算法
java实现一个动态监控系统,监控接口请求超时的趋势
java实现一个动态监控系统,监控接口请求超时的趋势
515 2
|
网络协议
卧槽!放个假,交换机受到ARP攻击了,怎么破?
卧槽!放个假,交换机受到ARP攻击了,怎么破?
323 5
|
11月前
|
XML 监控 负载均衡
Jacoco的覆盖率原理
JaCoCo(Java Code Coverage)是一种广泛使用的代码覆盖率工具,通过在字节码中插入探针(Probe)来收集覆盖率信息。
807 6
Jacoco的覆盖率原理
|
Linux
centos如何安装libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg
centos如何安装libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg
1653 0
|
12月前
宜搭教育行业权益调整
2024年12月1日起,教育行业体验版免费使用人数将调整为上限50人,每月可提交数据量调整为 1000 条,数据量免费总量仍为 2 万条。
1259 0