• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android开发之初识MVP模式

Android开发之初识MVP模式

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android平台开发之旅,android开发,android开发环境搭建,android开发工具,android开发教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android开发之初识MVP模式


这里写图片描述
各位亲爱的小伙伴,有没有想我啊,我胡汉wing又回来了。
很长一段时间没有更新博客。。原因是。。从离职回到学校以后,一直在享受最后的学生时光(打游戏).. 游戏固然很爽,但是觉得实在很荒废,于是半夜诈个尸..学习一下流行的MVP模式,就拿我刚学Android的项目“wifi密码读取器”开刀吧。。以前的代码很烂,所以来个彻底的重构…

MVP模式

mvp模式的介绍网上有很多,这里在简述一下:

MVP即 Model View Presenter, 他与MVC的区别在于在MVP里面View和Model不直接进行交互,完全交给Presenter。这样Activity就真实的成为了一个View,逻辑任务交给Presenter处理。不再是以前Activity即充当View又冲当Controller的情况。

简单来说如下图:
这里写图片描述

学习编写

简单的了解了一下MVP以后,开始拿“wifi密码读取器”开刀(wifi密码读取器是一款能够读取手机wifi密码的应用,配合万能钥匙使用更赞哦。。)

明确需求

进行第一部分的编写实现,需求如下图:
这里写图片描述

基本就是:
+ 初始化listview的内容
+ 为FloatingActionButton添加监听<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMSBpZD0="代码的编写">代码的编写

首先,来一个实体Bean

public class WifiBean {

    private String mSsid = "";
    private String mComment = "";
    private String mKey = "";

    public String getmSsid() {
        return mSsid;
    }

    public void setmSsid(String mSsid) {
        this.mSsid = mSsid;
    }

    public String getmComment() {
        return mComment;
    }

    public void setmComment(String mComment) {
        this.mComment = mComment;
    }

    public String getmKey() {
        return mKey;
    }

    public void setmKey(String mKey) {
        this.mKey = mKey;
    }
}

Model层,主要用于数据的获取或者其他增删操作

public interface IWifiModel {

    ArrayList getWifis();
    void addWifi(WifiBean wifiBean);
    void delWifi(WifiBean wifiBean);
}

public class WifiModelImpl implements IWifiModel {
    @Override
    //这里模拟实现从手机读取出wifi的密码
    public ArrayList getWifis() {
        ArrayList list = new ArrayList<>();
        for(int i = 0 ;i<5;i++) {
            list.add(new WifiBean());
        }
        return list;
    }

    @Override
    public void addWifi(WifiBean wifiBean) {

    }

    @Override
    public void delWifi(WifiBean wifiBean) {

    }
}

View层,主要表明view要做哪些事情

public interface IWifiView {
    void setListViewData(ArrayList list);

    void showSnackbar(View view);
}

因为Activity即为View,所以让Activity实现这个接口,并且实现view的方法。

public class MainActivity extends AppCompatActivity implements IWifiView{
    private ListView mListView;
    private WifiAdapter mWifiAdapter;
    //包含一个presenter
    private WifiPresenterImpl mWifiPresenter;
    private Toolbar mToolbar;
    private FloatingActionButton mFAB;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //initViews()方法仍然不变
        initViews();
       //初始化一个Presenter
        mWifiPresenter = new WifiPresenterImpl(this);
        //将需要初始化的东西交由Presenter处理
        mWifiPresenter.onCreate();
    }

    private void initViews() {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        mListView = (ListView) findViewById(R.id.listView);
        mFAB = (FloatingActionButton) findViewById(R.id.fab);
        mFAB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            //处理用户的事件
                mWifiPresenter.showSnackbar(view);
            }
        });
    }
    //实现view接口的方法,为listview设置数据
    @Override
    public void setListViewData(ArrayList list) {
        mWifiAdapter = new WifiAdapter(this,list);
        mListView.setAdapter(mWifiAdapter);
    }
    //实现view接口的方法,弹出Snackbar

    @Override
    public void showSnackbar(View view) {
        Snackbar.make(view, "侧滑有惊喜哦!", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show();
    }


}

最后是Presenter ,用来处理Model和View

public interface IWifiPresenter {
    //交付过来的onCreate
    void onCreate();
}

public class WifiPresenterImpl implements IWifiPresenter{
    private IWifiView mWifiView;
    private IWifiModel mWifiModel;

    public WifiPresenterImpl(IWifiView wifiView) {
        //传入View
        mWifiView = wifiView;
        //初始化Model
        mWifiModel = new WifiModelImpl();
    }
    //私有方法,在onCreate里调用,用来初始化listview数据,presenter操作model和view 
    private void setWifiDatas() {
        mWifiView.setListViewData(mWifiModel.getWifis());
    }

    //交付过来的onCreate()周期
    @Override
    public void onCreate() {
        setWifiDatas();
    }

    //让Snackbar显示
    public void showSnackbar(View view) {
        mWifiView.showSnackbar(view);
    }
}

好了,基本上简单的展示写完了,可以看到思路逻辑非常的清晰。这也是我对MVP模式的一点理解和应用,光是这一点内容,就理解了好久。。。。如果有什么错误的地方,求各位拍砖,一起讨论。

欢迎关注我的博客,蟹蟹!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android开发之初识MVP模式

相关文章

  • 2017-05-26Android常见问题及开发经验总结(三)
  • 2017-05-26【React Native开发】React Native控件之ViewPagerAndroid讲解以及美团首页顶部效果实例(17)
  • 2017-05-26安卓的主要几大布局,安卓布局
  • 2017-05-26浅谈Windows下SVN在Android Studio中的配置和基本使用,svnandroid
  • 2017-05-26基于android-async-http的android服务,android-async-http
  • 2017-05-26pull解析器: 反序列化与序列化,pull序列化
  • 2017-05-26Java多线程常见问题,java多线程
  • 2017-05-26好玩的Handler,好玩Handler
  • 2017-05-26Android 正则表达式验证手机号、姓名(包含少数民族)、身份证号,android正则表达式
  • 2017-05-26Android自定义ViewGroup打造各种风格的SlidingMenu

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • FragmentTabHost的基本用法,fragmenttabhost
    • android OrmLite,androidormlite
    • 7.5.4 WebView文件下载
    • list集合的排序Comparator和Collections.sort,collections.sort排序
    • React Native,reactnative
    • Android消息处理机制(Handler、Looper、MessageQueue与Message)
    • RelativeLayout的位置属性总结,relativelayout总结
    • Activity的生命周期,Activity生命周期
    • 网站访问量和服务器带宽的选择
    • Android 工具包 xUtils 3.3.16,xutils3.3.16

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有