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,阿里云的两种方法,以及上传镜像时可能遇见的问题和解决办法,每一步的详解和上传镜像时的规范。
10086 0
Docker 进阶 发布自己的Docker镜像 将镜像上传到阿里云和Docker Hub
|
Linux
centos如何安装libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg
centos如何安装libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg
2020 0
|
4天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
8285 37
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
4天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
569 4
|
4天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
542 3
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
3天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
4天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
693 148
|
4天前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
1928 10
|
4天前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
4天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1327 2