前言
从来不写博客的我,突然也想记录一下生活(zhuang bi),于是有了这篇开篇博客😝。如果觉得对你有帮助,请多多支持。虽然kotlin出来有一段时间了,我也是刚正式将kotlin作为Android开发第一语言使用,所以有什么不规范的地方希望各位大佬们能指出。本篇教程适用于有点基础的小白。
kotlin
什么是kotlin?kotlin简而言之就是一门基于jvm的编程语言和java兼容,但是比java更强大,而且大大减少你的代码,提高开发效率。
Mvp
mvp开发模式已经不是什么新鲜的技术,或者说它也不能说是一门技术。我的理解它就是让代码更加规范的一种编程风格。便于管理和开发,最主要的作用还是用于解耦。由于本篇是教大家如何用Kotlin快速搭建一个Android项目,所以对于一些mvp的概念和kotlin的使用不会做详细的介绍。
目录结构
以上是我的分包,这是一个Demo,实际项目还是得按具体情况具体分析。
Base基类
BaseModle
interface BaseModle {
//TODO:modle里相关操作
}
BaseView
BaseView
interface BaseView{
//TODO:view里相关操作
}
BasePresenter
abstract class BasePresenter<V : BaseView> {
var view: WeakReference<V>? = null
fun bindView(view: V) {
this.view = WeakReference(view)
}
fun isBind(): Boolean {
return view != null && view!!.get() != null
}
fun unBindView() {
if (isBind()) {
view!!.clear()
view = null
}
}
fun obtainView(): V? {
return if (isBind()) view!!.get() else null
}
}
其实和Java抽取mvp基类大同小异,具体问题具体分析,在接口中根据实际情况定义方法。
上面实现了modle,view,presenter的基类,我们在使用时只需继承即可。
Example:
MainContract
interface MainContract {
interface IView : BaseView {
//TODO:...
}
interface IModle : BaseModle {
//TODO:...
}
abstract class IPresenter : BasePresenter<IView>() {
//TODO:...
}
}
MainModle
class MainModle : MainContract.IModle {
//TODO:...
}
MainPresenter
class MainPresenter : MainContract.IPresenter() {
init {
var modle: MainContract.IModle = MainModle()
var view: MainContract.IView = obtainView()!!
}
}
接下来就是Activity的抽取,这个只是一个示例,具体情况还需具体分析
BaseActivity
abstract class BaseActivity<V : BaseView, P : BasePresenter<V>> : AppCompatActivity() {
var presenter: P? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(getResLayoutId())
presenter = initPresenter()
presenter!!.bindView(this as V)
initView()
initAction()
doMoreThings()
}
/**其他操作**/
abstract fun doMoreThings()
/**获取布局资源**/
abstract fun getResLayoutId(): Int
/**获取控件**/
abstract fun initView()
/**设置监听**/
abstract fun initAction()
/**初始化presenter**/
abstract fun initPresenter(): P
/**可触摸时执行的操作**/
abstract fun doOnResume()
override fun onResume() {
super.onResume()
doOnResume()
}
override fun onDestroy() {
super.onDestroy()
presenter!!.unBindView()
}
}
使用时只需继承即可
class MainActivity : BaseActivity<MainContract.IView, MainPresenter>(), MainContract.IView {
override fun doMoreThings() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getResLayoutId(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun initView() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun initAction() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun initPresenter(): MainPresenter {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun doOnResume() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
上面给出了Activity的一种抽取方式,Fragment大同小异,就不给出了。
结语
至此使用Kotlin搭建一个简单的mvp就已经完成了,其他业务逻辑根据实际情况向接口中添加。本人也刚加入kotlin开发,至此还有很多细节没有注意,欢迎大家吐槽🤣🤣🤣