博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dagger android 学习(四):基于dagger2的mvp架构
阅读量:7086 次
发布时间:2019-06-28

本文共 2749 字,大约阅读时间需要 9 分钟。

本系列博客主要用于自己学习积累,顺便帮助新手入门,如有问题,多多包涵。更详细的一些使用可以看看其他更加详细的博客。

dagger2的基本使用已经介绍完了,那么接下来就介绍一下,dagger2遇上mvp架构会擦出怎么样的火花。

mvp的架构想必就不用再谈了。model-view-presenter,每次我们都需要创建这三个必有的类,并且我们还需要在presenter中依赖view,view中创建presenter对象,而model进行数据处理这个则相对独立。那么dagger2能不能帮我们省去一些代码呢?答案是肯定的。

开始改造

首先这个整体模块的构造和上篇文章一样,所有重复的东西就不再论述,这里只论述关于model-view-presenter如何去处理,而@model @component具体怎么写就不阐述了。

View

创建接口IBaseView,以后所有的View实现这个接口即可。

public interface IBaseView {}复制代码

Presenter

创建BasePresenter,这个presenter提供了View的获取,这样我们就可以在presenter处理完逻辑后返回给view去刷新ui。

public class BasePresenter
{ private T view; public T getView() { return view; } public void attachView(T view){ this.view = view; }}复制代码

DaggerMvpActivity

创建daggerMvpActivity,这个类是以后所有Activity的基类,通过实现类,就自动对presenter、view实现了依赖注入,这样我们就可以很方便的获取presenter和view,无需再进行new Presenter以及setView的操作。

open class DaggerMvpActivity
, K: IBaseView>: AppCompatActivity(), IBaseView { @Inject lateinit var presenter: T override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) super.onCreate(savedInstanceState) presenter.attachView(this as K) }}复制代码

ActivityComponet

ActivityComponet与之前并无太大区别,只需要加入将之前的DaggerMvpActivity即可。

@Subcomponent(modules = [AndroidInjectionModule::class])interface ActivityComponet: AndroidInjector
, IBaseView>>{ //每一个继承BaseActivity的Activity,都共享同一个SubComponent @Subcomponent.Builder abstract class Builder: AndroidInjector.Builder
, IBaseView>>()}复制代码

使用

接下来,我们就可以按照之前的方法创建并使用Activity了。

public class MainActivity extends DaggerMvpActivity
implements MainView { @Inject A2 a2; @Inject SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, Main2Activity.class)); } }); a2.someThingA(); sp.toString(); presenter.doPresenter(); } @Override public void showToast() { Log.e("MainActivity", "showToast"); }}public class MainPresenter extends BasePresenter
{ @Inject public MainPresenter(){ } public void doPresenter(){ Log.e("MainPresenter", "doPresenter"); getView().showToast(); }}复制代码

上面的Activity与Presenter使用过程中我们就再也见不到new Presenter(view)这种操作了。 dagger2的用法还有许多,这里先不详细介绍了,这几篇模块主要还是积累使用。如有问题,多多包涵。

demo地址:[app-version3-mvp]模块()

转载于:https://juejin.im/post/5cc72088e51d456e6d13351d

你可能感兴趣的文章
signed和unsigned之间
查看>>
微软职位内部推荐-Software Engineer II
查看>>
空间谱专题06:宽带信号处理思路
查看>>
利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签
查看>>
python中高阶函数与装饰器(3)
查看>>
python django web 开发框架-1
查看>>
ubuntu下pip的安装、升级和使用
查看>>
扩展easyui combobox实现年月选择下拉框
查看>>
vue实现一个会员卡的组件(可以动态传入图片(分出的一个组件)、背景、文字、卡号等)...
查看>>
CSAPC08台湾邀请赛_T1_skyline
查看>>
【常用术语缩写】
查看>>
c++设计模式之抽象工厂模式
查看>>
C/C++ exception类
查看>>
C#语言课程11月9日
查看>>
使用枚举实现单例
查看>>
CDQ分治题目泛做(WYD第二轮)
查看>>
Zigbee Z‐STACK协议栈和TinyOS
查看>>
Unity3D下NGUI插件使用中文TrueTypeFont(ttf)字库教程
查看>>
关于MATLAB处理大数据坐标文件2017527
查看>>
【备忘录】毕业选课计划
查看>>