前言
從來不寫部落格的我(其實之前大學有寫過),突然也想記錄一下生活(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開發,至此還有很多細節沒有注意,歡迎大家吐槽