就一个十分简单的获取列表数据并展示的Demo;分别使用MVC和MVP实现;

先来一个假的数据源:

//假设这就是数据源
public class UserBean {
public static List<String> datas = Arrays.asList("CCB","JY","YHL","ZQ","ZJH","XSN");
}

MVC模式:

public class CActivity extends AppCompatActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_c);
TextView tv = findViewById(R.id.tv);
List<String> datas = UserBean.datas;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <datas.size() ; i++) {
stringBuilder.append("\n"+datas.get(i));
}
tv.setText(stringBuilder);
}
}

完成,十分的简单;

如果业务逻辑比较简单,没有必要使用MVP模式。MVP模式的优点就是解耦性强,让界面只专注UI的处理,跟Android API无关的业务逻辑由 Presenter 层来完成;

好了,接下来是MVP模式了:认真学认真看;

首先定义一个UserContract类,它是V和P的中间层,也是M给P反馈信息的载体;

public interface UserContract {
/**
* View接口是Activity(Fragment)Presenter层的中间层,它的作用是根据具体业务的需要,
* Presenter提供调用Activity中具体UI逻辑操作的方法
*/
interface View extends BaseView<Presenter>{
void showText(List<String> datas);
} /**
* Presenter接口是Model层给Presenter层反馈请求信息的传递载体,
* 所以需要在Presenter中定义数据请求的各种反馈状态:
*/
interface Presenter extends BasePresenter{
void setData();
void login();
}
}

通用的方法定义两个基类,写在基类中:

public interface BaseView<T> {
void setPresenter(@NonNull T presenter);
void showDialog();
void dissmisDialog();
void onError();
}
public interface BasePresenter {
void start();
}

接下来是UserPresenter类,它就是P层;

public class UserPresenter implements UserContract.Presenter{

    /**
* UserPresenter类是具体的逻辑业务处理类,负责请求数据,并对数据请求的反馈进行处理。
UserPresenter类的构造方法中有一个View接口的参数,是为了能够通过View接口通知Activity进行更新界面等操作。
*/
private UserContract.View v;
public UserPresenter(UserContract.View v){
this.v = v;
this.v.setPresenter(this);
} @Override
public void start() {
v.showText(UserBean.datas);
} @Override
public void setData() { } @Override
public void login() { }
}

V层:Activity:

/**
* 调用UserPresenter就要先实现Presenter需要的对应的View接口
*/
public class PActivity extends AppCompatActivity implements UserContract.View{ private TextView tv;
private UserContract.Presenter presenter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_c);
tv = findViewById(R.id.tv);
new UserPresenter(this);
presenter.start();
} @Override
public void showText(List<String> datas) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i <datas.size() ; i++) {
stringBuilder.append("\n"+datas.get(i));
}
tv.setText(stringBuilder);
} @Override
public void setPresenter(@NonNull UserContract.Presenter presenter) {
this.presenter = presenter;
} @Override
public void showDialog() { } @Override
public void dissmisDialog() { } @Override
public void onError() { }
}

Android MVP案例;的更多相关文章

  1. Android 最简单的MVP案例;

    随手撸个发出来: V:界面层 //界面层需要实现P.View方法,然后重写P.View中的方法:M层给的数据就在这些个方法的参数中: // 还要获取到P.Provide的实例,使用P.Provide去 ...

  2. android MVP模式介绍与实战

    android MVP模式介绍与实战 描述 MVP模式是什么?MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数 ...

  3. Android MVP+Retrofit+RxJava实践小结

    关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...

  4. [Android]Android MVP&依赖注入&单元测试

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5422443.html Android MVP&依赖注入 ...

  5. Android MVP + 泛型,实现了友好VP交互及Activity潜在的内存泄露的优化

    Android MVP粗来已经有段时间了,在项目中我也多多少少用了一些,不得不说代码使用这种模式后,条例确实清晰了好多,整个流程看起来有点各司其职的感觉(另一种的java面向对象的方式). 不过这里是 ...

  6. Android MVP模式

    转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...

  7. Android MVP模式 简单易懂的介绍方式

    主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200

  8. 结合实例分析Android MVP的实现

    最近阅读项目的源码,发现项目中有MVP的痕迹,但是自己却不能很好地理解相关的代码实现逻辑.主要原因是自己对于MVP的理解过于概念话,还没有真正操作过.本文打算分析一个MVP的简单实例,帮助自己更好的理 ...

  9. android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】

    android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...

随机推荐

  1. How to make a user a local admin on just one computer

    log in to each "test" PC as the local admin Go to "Control Panel", "User Ac ...

  2. 用express快速写一个hello world

    首页要具备 node.js环境, npm环境 创建一个目录, 然后进入此目录作为工作目录 mkdir myapp cd myapp 通过npm init 创建一个package.json文件 npm ...

  3. hanlp源码解析之中文分词算法详解

    词图 词图指的是句子中所有词可能构成的图.如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B).一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图. 需要稀疏2维 ...

  4. [转] Centos7 yum lock,无法上网问题,以及安装python3.5

    centos 7 无法上网问题 转自 http://www.cnblogs.com/katios/p/5660336.html 博主本着学无止境的精神在虚拟机上安装了一个centos7 来敲敲命令行. ...

  5. C#:decimal的去0显示

    public static string DecimalToString(decimal d) { return d.ToString("#0.######"); } 后面的0会给 ...

  6. HTML5 上传前端html页面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  7. adb命令模拟按键输入keycode

    adb命令模拟按键输入keycode 2017年05月18日 14:57:32 阅读数:1883 例子: //这条命令相当于按了设备的Backkey键 adb shell input keyevent ...

  8. 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例

    一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...

  9. 【java】之equals和==区别

      Java中数据类型可以分为两类 1.基本数据类型(byte,short,char,int,float,double,long,boolean) 2.复合数据类型(类,String等) Δ在基本数据 ...

  10. LeetCode——1. Two Sum

    一.题目链接:https://leetcode.com/articles/two-sum/ 二.题目大意: 给定一个int型数组A和int值a,要求从A中找到两个数,使得这两个数值的和为a:返回结果为 ...