MVP + Kotlin
来源:互联网 发布:java indexof的用法 编辑:程序博客网 时间:2024/06/08 17:26
此篇主要内容:使用Kotlin语言来构建MVP模式的项目
参考:洪神的浅谈MVP一文
kotlin的相关知识请查看:kotlin基础
java转kotlin工具:kotlin转换工具
在此kotlin/mvp的基础我不做赘述,请直接看下图
在此给各位介绍一个各个包的内容:
activity:用于数据显示,用户直观看到并操作的
dao:基本数据处理,数据库的增删改查等
service:真实的业务处理,比如:登录(验证用户信息以及获取用户信息)等等
model: 实体类
view: 关联我们的activity,fragment等,
presenter(针对页面,将业务与view关联):将view与model结合,在此其实是使用view与service具体业务,直接进行绑定,使业务可以直接与界面关联。
下面我们结合代码来看一下kotlin+mvp的实现
model:
package site.yongh.tradecar.modelimport java.util.*/** * Created by Elvis on 2017/7/18. * description:车辆信息 */class Car { var id: Int = 0 var name: String? = null var arrears: Double = 0.0 //车辆欠款 var company: String? = null //挂靠公司 var address: String? = null //车辆所属地 var carNumber: String? = null //车牌号 var trailerNumber: String? = null //挂车号 var owner: CarUser = CarUser() //车辆所属人 var brand: CarBrand = CarBrand() // 汽车品牌 var carBrandSerie: CarBrandSerie = CarBrandSerie() //汽车系列 var carConfig: CarConfig = CarConfig() //车辆配置 var insuranceStartTime: Date = Date() // 保险开始时间 var insuranceEndTime: Date = Date() // 保险结束时间 var selfProfit: Double = 0.0 // 中介自身盈利 var note: String? = null // 备注(交通违章等) var fixedYears: Double = 0.0 // 车辆使用年限}
View
baseView
package site.yongh.tradecar.viewimport android.content.Context/** * Created by Elvis on 2017/7/21. */interface IView { // 获取组件的上下文对象 fun getViewContext(): Context}
IMainActivityView(对应界面绑定view)
package site.yongh.tradecar.view.activityimport android.support.design.widget.BottomNavigationViewimport android.widget.FrameLayoutimport site.yongh.tradecar.view.IView/** * Created by Elvis on 2017/7/21. */interface IMainActivityView : IView { //Framlayout fun getFrameContent(): FrameLayout //底部BottomNavigationView fun getNavigation(): BottomNavigationView}
presenter
basePresenter
package site.yongh.tradecar.presenter/** * Created by Elvis on 2017/7/21. */abstract class BasePresenter<T> { var iView: T? = null // 绑定view fun attach(iView: T): BasePresenter<T> { this.iView = iView return this } // 取消绑定,在组件销毁时主动取消,避免内存泄漏 fun deAttach() { this.iView = null }}
CarUserPresenter
(个人建议Presenter的创建结合界面而不是功能或者业务,此处建议命名IMainActivityPresenter)
package site.yongh.tradecar.presenter.activityimport android.widget.Toastimport site.yongh.tradecar.Rimport site.yongh.tradecar.presenter.BasePresenterimport site.yongh.tradecar.view.activity.IMainActivityView/** * Created by Elvis on 2017/7/21. */class CarUserPresenter : BasePresenter<IMainActivityView>() { // 实现界面的 tab选择功能 fun tabSelected(tab: Int) { when (tab) { R.id.navigation_home -> Toast.makeText(iView!!.getViewContext(), "购买", Toast.LENGTH_SHORT).show() R.id.navigation_dashboard -> Toast.makeText(iView!!.getViewContext(), "出售", Toast.LENGTH_SHORT).show() R.id.navigation_notifications -> Toast.makeText(iView!!.getViewContext(), "车辆信息", Toast.LENGTH_SHORT).show() } }}
activity(用户交互页面业务+view)
package site.yongh.tradecar.activityimport android.content.Contextimport android.os.Bundleimport android.support.design.widget.BottomNavigationViewimport android.widget.FrameLayoutimport kotlinx.android.synthetic.main.activity_main.*import site.yongh.tradecar.Rimport site.yongh.tradecar.activity.base.BaseActivityimport site.yongh.tradecar.presenter.activity.CarUserPresenterimport site.yongh.tradecar.view.activity.IMainActivityViewclass MainActivity : BaseActivity(), IMainActivityView { val mCarUserPresenter: CarUserPresenter = CarUserPresenter().attach(this) as CarUserPresenter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) this.home_navigation .setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) } // activity销毁时,销毁presenter,防止内存泄漏 override fun onDestroy() { mCarUserPresenter.deAttach() super.onDestroy() } /** * 底部切换监听器 */ private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> mCarUserPresenter!!.tabSelected(item.itemId) when (item.itemId) { R.id.navigation_home -> { return@OnNavigationItemSelectedListener true } R.id.navigation_dashboard -> { return@OnNavigationItemSelectedListener true } R.id.navigation_notifications -> { return@OnNavigationItemSelectedListener true } } false } /** * IView实现 begin */ override fun getFrameContent(): FrameLayout { return this.home_content } override fun getNavigation(): BottomNavigationView { return this.home_navigation } override fun getViewContext(): Context { return this } /* IView实现 end */}
阅读全文
1 0
- MVP + Kotlin
- kotlin初探mvp架构
- kotlin封装MVP
- Kotlin实现MVP设计模式
- 初学Kotlin MVP+Retofit2+Rxjava2
- 在kotlin-MVP使用dagger2(v2.11+)
- kotlin实现 简单的MVP模式
- 使用Kotlin语言编写Android MVP案例
- kotlin+Rxjava+retrofit搭建MVP模式
- kotlin for android----------MVP模式实现登录
- Android Mvp模式详解(Kotlin篇)
- Kotlin + Google mvp 实现新的架构模式
- Kotlin + Google mvp 实现新的架构模式
- 十分钟学会kotlin实现Android MVP模式开发
- Kotlin Android Extensions+Android MVP项目(RxJava+Rerotfit+OkHttp+Glide)
- 关于kotlin插件 MVP Generator的使用方式
- Kotlin
- Kotlin
- 自定义View 之 创建复合控件
- 【JVM】静态分派和动态分派
- ASP.NET CORE做的网站运行在docker上(不用dockerfile文件部署)
- mysql-存储引擎
- POJ-2251 Dungeon Master(简单的三维bfs)
- MVP + Kotlin
- 详解HTML中的表单元素
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- struts、spring、mybatis 整合(spring.xml)
- python 列表操作
- Android布局知识整理一
- Android 实现自定义闹钟
- 组合数
- 硬链接、软链接和inode