ReadHub项目Kotlin版开发指南(三、MVP架构)

ReadHub项目Kotlin版转换指南(一、环境搭建)

ReadHub项目Kotlin版转换指南(二、数据库和网络请求)

ReadHub项目Kotlin版转换指南(三、MVP架构)

Android 开发中的 MVP 架构相信大家都已经熟悉,不熟悉的请右转 Google,ReadHub 项目从 Java 转换成 Kotlin 过程中,我们需要一套新的架构方式来实现(Kotlin 项目中没有使用 dagger2)。

base 为 MVP 架构的基础部分,user 为其具体使用过程。

base

BaseContract

interface BaseContract {
    interface IView {
        fun showLoading()
        fun hideLoading()
    }

    interface IPresenter<V : IView> {
        fun getView(): V
    }
}

BaseContract 中定义了两个接口 IViewIPresenter

IView 接口中定义了 Loading 的操作,使其可以在每个 View 中使用,如果你的项目中有一些需要在大多数 View 中用到的函数,也可定义在此接口中。

IPresenter 中声明一个泛型 V 继承自 IView,通过 getView 函数可以获取到该变量,用来回调 Model 中的结果给 View

BaseActivity && BaseFragment

abstract class BaseActivity<P : BaseContract.IPresenter<*>> : AppCompatActivity(), BaseContract.IView {
    private var mKProgressHUD: KProgressHUD? = null
    protected lateinit var mPresenter: P

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val layoutId = getLayoutId()
        setContentView(layoutId)
        initView()
        initData()
    }

    protected abstract fun getLayoutId(): Int
    protected abstract fun initView()
    protected abstract fun initData()

    override fun showLoading() {
        mKProgressHUD = KProgressHUD.create(this)
        mKProgressHUD?.setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
                ?.setCancellable(true)
                ?.setAnimationSpeed(2)
                ?.setDimAmount(0.5f)
                ?.show()
    }

    override fun hideLoading() {
        mKProgressHUD?.dismiss()
    }
}
abstract class BaseFragment<P : BaseContract.IPresenter<*>> : Fragment(), BaseContract.IView {
private var mRootView: View? = null
private var mKProgressHUD: KProgressHUD? = null
protected lateinit var mPresenter: P

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
inflaterView(inflater, container)
return mRootView
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
initView(mRootView)
initData大专栏  ReadHub项目Kotlin版开发指南(三、MVP架构)n class="p">()

时间: 2024-11-05 13:26:09

ReadHub项目Kotlin版开发指南(三、MVP架构)的相关文章

HelloX项目github协同开发指南

概述 为了提高协同开发效率,HelloX项目已托管到github站点上. 依据眼下的开发进展,创建了下列几个子项目: HelloX操作系统内核项目:https://github.com/hellox-project/HelloX_Kernel.git HelloX操作系统GUI模块项目:https://github.com/hellox-project/HelloX_GUI.git 面向STM32的移植版:https://github.com/hellox-project/HelloX_STM3

Android开发中的MVP架构(转)

写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn=1cd10bd9efaac7083575367a8b4af52f&scene=1&srcid=0910ARzPpBvVYPI1NDBZnixa#wechat_redirect 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目

Boost程序库完全开发指南——深入C++“准”标准库(第3版)

内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Boost 社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理.正则表达式.容器与数据结构.并发编程.函数式编程.泛型编程.设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简捷.优雅.灵活和高效. <Boost程序库完全开发指南——深入C++“准”标准库(

现代前端库开发指南系列(三):从说明文档看库的前世今生

前言 我们在工作中很多时候都要做技术选型,去找寻既能满足自己需求又靠谱的第三方库:在前端开源生态季度繁盛的现状下,只要不是太小众的需求,我们很容易就能找到一堆相关的开源库,那我们具体要怎么做决策呢?我的做法是,先阅读开源库的说明文档让自己有一个感性的认识,然后挑选出其中的两三个库来进行更深入更全面的了解.如此说来,这说明文档是不是就很像我们求职时的简历呢?"简历"关都过不了,何谈"offer"啊! 本文将介绍一个库(即不局限于前端领域)所要具备的说明文档,主要包括

使用express4.x版、Jade模板以及mysql重写《nodejs开发指南》微博实例

最近阅读<nodejs开发指南>一书,书是不错的,然而其微博代码示例用的是express3.x,用些过时了,运行代码出现不少bug(我电脑安的是express4.x),于是用express4.x+jade模板重写一遍(原代码使用的是ejs模板).因为想体验一下node结合MySQL开发,于是将mongodb改为mysql.下面进入正文 1.安装express框架与生成器: 2.进入网站目录,创建项目: 3.安装中间件与依赖项: package.json如下 单独安装时记得加上--save,便于

Python 3程序开发指南(第2版 修订版)笔记

Python 3程序开发指南(第2版 修订版) 目录 1 过程型程序设计快速入门 2 数据类型 3 组合类型 4 控制结构与函数 5 模块 6 OOP 7 文件处理 8 高级程序设计技术 8.1 FP 9 调试.测试与Profiling 10 进程与线程 11 网络 12 数据库 13 正则表达式 14 分析简介 14.1 PyParsing 14.2 PLY 15 GUI 过程型程序设计快速入门 for in try except as 数据类型 sys.float_info.epsilon

(三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序

配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一.   需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclipse上安装hadoop的开发插件.最新释放出的hadoop包含源码的包,以 hadoop-1.X为例,包含相关的eclipse插件的源码,因此可以针对自己的eclipse版本来编译一个合适hadoop的eclipse插件.下面将详细介绍插件的编译安装过程,以及在Eclipse上配置hadoop开发插

node开发指南中的microblog项目中遇到的问题总结及解决方法

1      使用connect-mongdo时,报错:Cannot read property 'Store' of undefined 解决: require('connect-mongo')的时候加一个参数express,如下: var express = require('express'); var MongoStore = require('connect-mongo')(express), 2      使用app.use(express.router(routers)) 提示 h

移动应用微信图像接口开发指南 (iOS版)

使用说明 本文档主要介绍微信图像SDK(iOS版)使用方法,利用SDK可以准确搜索到用户上传的图像. 本文属于入门级文档,旨在帮助开发者快速学习iOS SDK的使用并应用到自身开发工作.具体 API 可到"资源下载 "页下载<微信图像SDK(iOS版)开发手册>进行查询. 准备工作 第一步 创建移动应用 请到"管理中心"创建移动应用,点击"创建移动应用",填写相关资料,然后将该应用提交审核,只有审核通过的应用才能进行开发. 注册完毕,