package com.test.mvp;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
interface BaseView {
/**
* 判断宿主是否还存活,避免NPE
*
* @return
*/
boolean isAlive();
}
class BasePresenter<IView extends BaseView> {
/**
* 根据MVP的模型,Presenter需要持有View对象,才能将处理好的数据回调出去
*/
public IView mView;
public void attach(IView mView) {
this.mView = mView;
}
public void detach() {
this.mView = null;
}
}
/**
* 定义业务接口
*/
interface HomeContract {
interface View extends BaseView {
void onGetuserInfo(Object data, String errorMsg);
void onSaveUserInfo(Object data, String errorMsg);
}
/**
* 每个接口 都会在View 存在与之对应的callback回调
*/
abstract class Presenter extends BasePresenter<View> {
public abstract void getUserInfo();
public abstract void saveUserInfo();
}
}
class HomePresenter extends HomeContract.Presenter {
@Override
public void getUserInfo() {
if (mView != null && mView.isAlive()) {
mView.onGetuserInfo(null, null);
}
}
@Override
public void saveUserInfo() {
}
}
public class MainActivity extends AppCompatActivity implements HomeContract.View {
private HomePresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
presenter = new HomePresenter();
presenter.attach(this);
presenter.getUserInfo();
}
@Override
public boolean isAlive() {
/**
* 当前Activity(宿主)是否存活
*/
return (!isDestroyed() && !isFinishing());
}
@Override
protected void onDestroy() {
super.onDestroy();
/**
* 释放掉IView
*/
presenter.detach();
}
@Override
public void onGetuserInfo(Object data, String errorMsg) {
}
@Override
public void onSaveUserInfo(Object data, String errorMsg) {
}
}
class MainActivity1 extends BaseActivity<HomePresenter> implements HomeContract.View {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPresenter.getUserInfo();
}
@Override
public void onGetuserInfo(Object data, String errorMsg) {
}
@Override
public void onSaveUserInfo(Object data, String errorMsg) {
}
}
class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements BaseView {
protected P mPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Type superClass=this.getClass().getGenericSuperclass();
//具备泛型参数的类型
if(superClass instanceof ParameterizedType){
Type[] arguments = ((ParameterizedType) superClass).getActualTypeArguments();
if(arguments!=null&&arguments[0] instanceof BasePresenter){
try{
mPresenter= (P) arguments[0].getClass().newInstance();
mPresenter.attach(this);
}catch (IllegalAccessException e){
e.printStackTrace();
}catch (InstantiationException e){
e.printStackTrace();
}
}
}
}
@Override
public boolean isAlive() {
return (!isDestroyed() && !isFinishing());
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mPresenter!=null){
mPresenter.detach();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
为了解决Activity任务过于繁重 , 数据层和视图层交织在一起的问题就此诞生了mvp架构模式 . ● 让宿主专注UI逻辑和用户交互的处理 . 把宿主中的业务逻辑分离出来 , 所有跟Android API无关的业务逻辑由Presenter 层来完成 . 但是缺点就是增加了代码量 . ● Activity 和 Fragment 视为View 层 , 负责处理UI和用户交互 . ● Presenter 为业务处理层 , 负责处理业务逻辑 , 发起请求数据 . ● Model 层中包含着具体的数据请求 , 数据源. 但是这一层在 retrofit , restful 的场景下可以被弱化 . 三层之间调用顺序为 view -> presenter -> model , 为了调用安全着想不可反向调用 ! 不可跨级调用 !
资源推荐
资源详情
资源评论
收起资源包目录
TestMvp.zip (56个子文件)
TestMvp
.gradle
buildOutputCleanup
cache.properties 49B
buildOutputCleanup.lock 17B
7.4
fileChanges
last-build.bin 1B
checksums
md5-checksums.bin 25KB
sha1-checksums.bin 74KB
checksums.lock 17B
executionHistory
executionHistory.lock 17B
dependencies-accessors
gc.properties 0B
dependencies-accessors.lock 17B
fileHashes
fileHashes.lock 17B
fileHashes.bin 18KB
gc.properties 0B
vcsMetadata
vcs-1
gc.properties 0B
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 58KB
gradle-wrapper.properties 230B
app
src
androidTest
java
com
test
mvp
ExampleInstrumentedTest.java 738B
test
java
com
test
mvp
ExampleUnitTest.java 373B
main
java
com
test
mvp
MainActivity.java 4KB
res
mipmap-xxhdpi
ic_launcher_round.webp 6KB
ic_launcher.webp 3KB
mipmap-hdpi
ic_launcher_round.webp 3KB
ic_launcher.webp 1KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
values-night
themes.xml 809B
mipmap-mdpi
ic_launcher_round.webp 2KB
ic_launcher.webp 982B
mipmap-xxxhdpi
ic_launcher_round.webp 8KB
ic_launcher.webp 4KB
mipmap-xhdpi
ic_launcher_round.webp 4KB
ic_launcher.webp 2KB
xml
data_extraction_rules.xml 551B
backup_rules.xml 478B
values
colors.xml 378B
strings.xml 69B
themes.xml 809B
layout
activity_main.xml 778B
drawable
ic_launcher_background.xml 5KB
AndroidManifest.xml 1KB
proguard-rules.pro 750B
libs
build.gradle 1KB
.gitignore 6B
gradlew.bat 3KB
build.gradle 229B
.idea
workspace.xml 6KB
misc.xml 454B
inspectionProfiles
Project_Default.xml 1KB
compiler.xml 170B
gradle.xml 660B
settings.gradle 324B
local.properties 437B
gradlew 6KB
mvp架构模式.ccd 8KB
.gitignore 225B
共 56 条
- 1
资源评论
️邪神
- 粉丝: 1w+
- 资源: 67
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现配电网三相潮流计算方法,对几种常用的配电网潮流计算方法进行了对比分析.rar
- 基于matlab实现配电网潮流 经典33节点 前推回代法潮流计算 回代电流 前推电压 带注释.rar
- 基于matlab实现模拟退火遗传算法的车辆调度问题研究,用MATLAB语言加以实现.rar
- 基于matlab实现蒙特卡洛的的移动传感器节点定位算法仿真代码.rar
- 华中数控系统818用户说明书
- 基于matlab实现卡尔曼滤波器完成多传感器数据融合 对多个机器人的不同传感器数据进行融合估计足球精确位置.rar
- 基于matlab实现进行简单车辆识别-车辆检测.rar
- 基于JSP物流信息网的设计与实现
- 基于matlab实现车牌识别程序,和论文,自己做的,做毕业设计的可以看看 .rar
- Windows系统下安装与配置Neo4j的步骤
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功