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

相关文章
|
安全 关系型数据库 MySQL
Docker 进阶 发布自己的Docker镜像 将镜像上传到阿里云和Docker Hub
上传自己制作的docker镜像的方法,将docker镜像上传到Docker Hub,阿里云的两种方法,以及上传镜像时可能遇见的问题和解决办法,每一步的详解和上传镜像时的规范。
10343 0
Docker 进阶 发布自己的Docker镜像 将镜像上传到阿里云和Docker Hub
|
4月前
|
弹性计算 机器人 API
保姆级教程:阿里云+本地多系统部署OpenClaw(Clawdbot) 集成企业微信流程+百炼API配置指南
2026年,开源AI智能体OpenClaw(曾用名Clawdbot、Moltbot,因Logo酷似小龙虾被网友亲切称为“小龙虾”)持续成为企业数字化办公的核心工具,GitHub星标数量突破18.8万,其“自然语言驱动、插件化拓展、多端无缝集成”的核心优势,能够帮助企业将重复性工作流程自动化,大幅提升办公效率。企业微信作为国内普及率最高的办公协同平台,拥有完善的生态体系和庞大的用户基数,将OpenClaw与企业微信集成,可实现“员工在企业微信内通过简单对话,完成会议纪要生成、任务分配、数据查询、服务器运维等复杂操作”的闭环,无需学习新工具,真正打破信息孤岛,降本增效。
1283 0
|
5月前
|
人工智能 机器人 网络安全
2026年阿里云一键秒级部署OpenClaw(原Clawdbot)教程 快速接入QQ、企微、飞书、钉钉等IM软件
OpenClaw(原Clawdbot)作为轻量化企业级AI自动化代理工具,2026年阿里云推出的“秒级一键部署”方案彻底颠覆了传统部署流程——无需手动配置环境、编译代码,仅需3步即可完成云端部署,同时新增对QQ、企业微信、飞书、钉钉等主流IM软件的原生适配,实现“AI指令在IM端下达,阿里云服务器执行自动化任务”的全链路提效。本文将完整拆解阿里云OpenClaw秒级部署全流程,并针对不同IM软件的接入逻辑、权限配置、调试方法给出详细指南,包含实操代码命令与跨平台适配技巧,帮助企业快速打通“AI能力+IM协作”的核心场景。
1410 6
|
1月前
|
人工智能 自然语言处理 算法
2026年企业建设智能客服系统要多少钱?费用、选型、落地
2026年全球智能客服市场爆发,AI准确率达93%,但传统“按坐席付费”模式失效。本文拆解“基础软件+AI算力+集成实施”三层成本结构,结合瓴羊Quick Service等标杆案例与星巴克、申通实战数据,揭示数十万至百万级投入的ROI逻辑,助企业避开隐性成本陷阱,精准锚定投入产出比。(239字)
|
1月前
|
数据采集 SQL 自然语言处理
2026企业级Agent实战指南:瓴羊五大核心场景全景解析
瓴羊推出企业级Agent解决方案,以AgentOne为智能调度中枢,联动Quick Audience(营销)、Quick Service(服务)、Quick BI(分析)与Dataphin(数据治理)五大模块,实现跨场景协同、闭环落地。2026年已进入实战阶段,聚焦真实业务问题,创造可量化价值。(239字)
|
26天前
|
人工智能 自然语言处理 数据可视化
2026企业如何应用BI系统?数据→信息→洞察→行动落地指南
本文探讨2026年BI系统如何从“数据陈列室”升级为“决策发动机”,提出“数据→信息→洞察→行动”全链路方法论,结合瓴羊Quick BI实践,涵盖智能集成、AI问数、敏捷可视化及业务嵌入式决策,并提供真实案例与避坑指南。(239字)
|
1月前
|
人工智能 自然语言处理 数据可视化
企业如何应用智能客服?瓴羊Quick Service用好智能客服系统落地应用策略
本文剖析智能客服“上线即吃灰”困局,提出瓴羊Quick Service四大落地策略:结构化知识构建、人机协同坐席辅助、数据驱动效果评估、组织保障运营机制,助力企业从“可用”迈向“好用”,实现服务数智化升级。(239字)
|
2月前
|
存储 运维 数据可视化
2026年企业数据分析系统建设费用预算清单:详细成本解析
本文系统梳理企业数据分析系统建设的全成本构成,涵盖基础设施、软件许可、实施开发、运维支持及人员培训五大模块,并以瓴羊Quick BI为例详解其弹性计费模式与预算控制策略,助力企业制定可执行、可优化的2026年度数据分析预算清单。(239字)
|
2月前
|
人工智能 供应链 监控
2026年五款主流ChatBI产品推荐,适合电商、制造多场景及分析功能详解
本文深度解析2026年五大主流ChatBI工具(瓴羊Quick BI、SmartBI、Power BI、Qlik Sense、Tableau)在电商与制造行业的适配能力。重点剖析瓴羊Quick BI“智能小Q”五大AI Agent,覆盖自然语言查询、自动解读、报告生成、看板搭建与异常洞察,并提供分规模、分场景的实用选型指南。(239字)
|
3月前
|
运维 监控 安全
你的 OpenClaw 真的在受控运行吗?
本文基于 OpenClaw 与阿里云 SLS,将 Session 审计日志、应用日志与 OTEL 遥测统一汇入,搭建「日志 + 指标 + 链路」可观测体系,实现行为审计、运维观测与安全审计闭环,回答「Agent 是否在受控运行」。
510 33