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       */}
原创粉丝点击