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">()
} /**
* 设置View
*
* @param inflater
* @param container
*/
private fun inflaterView(inflater: LayoutInflater, @Nullable container: ViewGroup?) {
if (mRootView == null) {
mRootView = inflater.inflate(getLayoutId(), null)
}
} protected abstract fun getLayoutId(): Int
protected abstract fun initView(view: View?)
protected abstract fun initData() override fun showLoading() {
mKProgressHUD = KProgressHUD.create(activity)
mKProgressHUD?.setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
?.setCancellable(true)
?.setAnimationSpeed(2)
?.setDimAmount(0.5f)
?.show()
} override fun hideLoading() {
mKProgressHUD?.dismiss()
}
}

BaseActivity 中声明泛型 P 继承自 BaseContract.IPresenter,变量 mPresenter 声明类型 P 并且延迟初始化(在子类中初始化)。

BaseActivity 继承 BaseContract.IView,重写回调方法,如 hideLoading、showLoading

news

NewsContract

interface NewsContract {
interface View : BaseContract.IView {
fun updateTechNews(publishDate: String, newsMos: ArrayList<NewsMo>)
} interface Presenter : BaseContract.IPresenter<View> {
fun getTechNews(publishDate: String)
}
}

NewsPresenter

class NewsPresenter(var mView: BaseContract.IView) : NewsContract.Presenter {
override fun getView(): NewsContract.View {
return mView as NewsContract.View
} override fun getTechNews(publishDate: String) {
LogUtils.i("apiTachNews === ")
App.sInstance.apiService(ReadhubApiService::class.java)
?.apiTeachNews(publishDate, Constant.NEWS_PAGE_SIZE)
?.compose(RxSchedulers.io_main())
?.subscribe( {
getView()?.updateTechNews(publishDate, it.data!!)
}, {
LogUtils.e("apiTeachNews error == ${it}")
}) }
}

getView 获取 IView 对象的实现。

NewsFragment

class NewsFragment : BaseFragment<NewsPresenter>(), NewsContract.View {
override fun getLayoutId(): Int {
return R.layout.fragment_news
} override fun initView(view: View?) {
} override fun initData() {
mPresenter = NewsPresenter(this)
mPresenter?.getTechNews("")
} override fun updateTechNews(publishDate: String, newsMos: ArrayList<NewsMo>) {}
}

构造 mPresenter 对象,获取 Model 中的数据。

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

  1. HelloX项目github协同开发指南

    概述 为了提高协同开发效率,HelloX项目已托管到github网站上.根据目前的开发进展,创建了下列几个子项目: HelloX操作系统内核项目:https://github.com/hellox-p ...

  2. 转:Android开发中的MVP架构(最后链接资源不错)

    Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...

  3. 转: Android开发中的MVP架构详解(附加链接比较不错)

    转: http://www.codeceo.com/article/android-mvp-artch.html 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解M ...

  4. 设计模式笔记之二:Android开发中的MVP架构(转)

    写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...

  5. kotlin 语言入门指南(三)--编码习惯

    这章主要讲当前 kotlin 的一些编码习惯. 命名 如无疑问,kotlin 的命名风格与以下的java风格一样: --驼峰命名法(不要使用下划线) --类名首字母大写 --方法和属性名首字母小写 - ...

  6. 【Android】家庭记账本手机版开发报告三

    一.说在前面 昨天 对第一天的框架结构进行了四方面的完善 今天 对界面显示和逻辑结构进行完善 问题 无 二.界面展示完善 1.使用可回收的列表recyclerView展示账单的信息,并设置数据项为卡片 ...

  7. 腾讯云TDSQL MySQL版 - 开发指南 二级分区

    TDSQL MySQL版 目前支持 Range 和 List 两种格式的二级分区,具体建表语法和 MySQL 分区语法类似. 二级分区语法 一级 Hash,二级 List 分区示例如下: MySQL ...

  8. 腾讯云TDSQL MySQL版 - 开发指南 分布式事务

    由于事务操作的数据通常跨多个物理节点,在分布式数据库中,类似方案即称为分布式事务. TDSQL MySQL版 支持普通分布式事务协议和 XA 分布式事务协议.TDSQL MySQL版(内核5.7或以上 ...

  9. 《iOS开发指南:从零基础到App Store上架(第2版)》

    <iOS开发指南:从零基础到App Store上架(第2版)> 基本信息 作者: 关东升 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115348029 上架时间:201 ...

随机推荐

  1. Python3+Pycharm+PyQt5环境搭建

    操作系统:Windows 10 Python版本:3.7及以上版本均可 PyCharm:PyCharm 2019.3 1.安装 PyQt5 及其拓展工具. pip install pyqt5 pip ...

  2. 记录一次追踪@AutoWired的过程

    目录 记录一次追踪@AutoWired的过程 前言 疑惑:依赖究竟是怎么自动注入的 AutoWiredAnnotationBeanPostProcessor中探究 自动注入debug流程追踪 dete ...

  3. 洛谷P1525 关押罪犯(并查集、二分图判定)

    本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编 ...

  4. 0.3W微功率放大器

    电路结构 电路摘自<晶体管电路设计(上)>. 电路采用+5V单电源供电,两级结构.Tr1构成共射极放大电路作为电压放大级:Tr3,Tr4构成推挽的射极跟随器作为输出级:Tr2作为射极跟随器 ...

  5. ubuntu19.10——snap错误has install-snap change in progress

    使用软件商店安装时遇到问题 snap has install-snap change in progress 原因是之前的安装错误终止,使得现在的安装无法进行,解决方案: 终端输入: snap cha ...

  6. ZJNU 1130 - 龟兔赛跑——中高级

    只需求出乌龟最短耗时跟兔子耗时比即可将起点 0 和终点 N+1 也看做充电站,进行动态规划对第i个点进行动态规划,则可以得到状态转移方程为dp[i] = max{dp[j]+time[i][j]} j ...

  7. << 和>> 的计算公式

    在java中,一个数左移n位,就是将这个数乘以2的n次方,右移就是将这个数除以2的n次方. 如: 8>>2 = 2  (8/2^2) 15 << 3 = 120  (15*(2 ...

  8. [LC] 373. Find K Pairs with Smallest Sums

    You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...

  9. hdu 6035 Colorful Tree(虚树)

    考虑到树上操作:首先题目要我们求每条路径上出现不同颜色的数量,并把所有加起来得到答案:我们知道俩俩点之间会形成一条路径,所以我们可以知道每个样例的总的路径的数目为:n*(n-1)/2: 这样单单的求, ...

  10. Linux使用/proc/stat计算CPU使用率

    在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间,当没有用户进程.系统进程等需要执行 ...