案例圖1
案例圖1
項(xiàng)目數(shù)據(jù)列表展示
MVP 架構(gòu) 分包
mvp架構(gòu)圖
Contract 契約接口代碼塊實(shí)現(xiàn)
/**
* @copyright: zhidu
* @author fanyanlong
* @email 326445811@qq.com
* @versions: V1.0.1
* @data: 2019/4/16
* @description:
*
*/
interface Contract {
//Iview
interface Iview {
fun GetViewDate(mktbean: KtBean)
}
// Ipresenter
interface Ipresenter {
fun GetPersnetViewDate(page: Int, count: Int)
fun Attch(miview: Iview)
fun Decth()
}
// Imodel
interface Imodel {
fun GetModelDate(page: Int, count: Int, model: ModelCallBack)
interface ModelCallBack {
fun onSuccess(mttbena: KtBean)
fun onFails()
}
}
}
View層代碼塊實(shí)現(xiàn)
**
* @copyright: zhidu
* @author fanyanlong
* @email 326445811@qq.com
* @versions: V1.0.1
* @data: 2019/4/16
* @description:
*
*/
open class KtActivity : AppCompatActivity(), Contract.Iview {
var ktpresenter: KtPresenter? = null
var adapter: KtAdapter? = null
var page: Int = 1
var count: Int = 3
var mHandler: Handler? = Handler()
var array: ArrayList<Any>? = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kt)
tv.text = "職業(yè)渡人"
ktpresenter = KtPresenter(this)
ktpresenter!!.Attch(this@KtActivity)
//添加布局管理器
kt_xrecyclerview.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
var block: (KtPresenter?) -> Unit = {
it!!.Attch(this)
it.GetPersnetViewDate(page, count)
}
ktpresenter.let(block)
kt_xrecyclerview.setLoadingMoreEnabled(true)
kt_xrecyclerview.setPullRefreshEnabled(true)
kt_xrecyclerview.setLoadingMoreProgressStyle(ProgressStyle.BallZigZag)
kt_xrecyclerview.setLoadingListener(object : XRecyclerView.LoadingListener {
override fun onLoadMore() {
//kt_xrecyclerview.postDelayed(Runnable { kotlin.run { } },3000)
mHandler!!.postDelayed(object : Runnable {
override fun run() {
page++
Log.i("onLoadMore===", page.toString())
// ktpresenter!!.Attch(this@KtActivity)
ktpresenter!!.GetPersnetViewDate(page, count)
adapter!!.notifyDataSetChanged()
kt_xrecyclerview.loadMoreComplete()
}
}, 1000)
}
override fun onRefresh() {
page = 1
// ktpresenter!!.Attch(this@KtActivity)
Log.i("onRefresh===", page.toString())
ktpresenter!!.GetPersnetViewDate(page, count)
adapter!!.notifyDataSetChanged()
kt_xrecyclerview.refreshComplete()
}
})
}
override fun GetViewDate(mktbean: KtBean) {
adapter = KtAdapter(this@KtActivity, mktbean)
kt_xrecyclerview.adapter = adapter
}
override fun onDestroy() {
super.onDestroy()
ktpresenter!!.Decth()
}
}
Presenter 代碼塊實(shí)現(xiàn)
/**
* @copyright: zhidu
* @author fanyanlong
* @email 326445811@qq.com
* @versions: V1.0.1
* @data: 2019/4/16
* @description:
*
*/
open class KtPresenter(val mview: KtActivity) : Contract.Ipresenter {
var mmodel: KtModel? = KtModel()
//?可為空
override fun Attch(miview: Contract.Iview) {
//軟引用
// soft = SoftReference<Contract.Imodel>(mmodel)
}
override fun Decth() {
if (mview != null) {
mview == null
}
}
override fun GetPersnetViewDate(page: Int, count: Int) {
//!!表示對(duì)象不為空的情況下去執(zhí)行
mmodel!!.GetModelDate(page, count, object : Contract.Imodel.ModelCallBack {
override fun onSuccess(mttbena: KtBean) {
mview.GetViewDate(mttbena)
}
override fun onFails() {
}
})
}
}
Model 代碼塊實(shí)現(xiàn)
/**
* @copyright: zhidu
* @author fanyanlong
* @email 326445811@qq.com
* @versions: V1.0.1
* @data: 2019/4/16
* @description:
*
*/
//open可被繼承
class KtModel : Contract.Imodel {
//override重寫(xiě) fun方法
override fun GetModelDate(page: Int, count: Int, model: Contract.Imodel.ModelCallBack) {
//獲取網(wǎng)絡(luò)
RetrofitUtils.instance.create.getNetDate(page, count)
//切換io流
.subscribeOn(Schedulers.io())
//切換主線程
.observeOn(AndroidSchedulers.mainThread())
//訂閱 object對(duì)象變量
.subscribe(object : DisposableObserver<KtBean>() {
//完成操作
override fun onComplete() {
}
//下一步操作
override fun onNext(t: KtBean) {
model.onSuccess(t)
}
//錯(cuò)誤操作
override fun onError(e: Throwable) {
}
})
}
}
總結(jié)
上面主要以項(xiàng)目主干模塊代碼一個(gè)整理驰怎,如果想實(shí)現(xiàn)此效果請(qǐng)關(guān)注私信反饋問(wèn)題孩灯,線上解決
此案例以分享github上面鏈接如下:
Kotlin項(xiàng)目實(shí)戰(zhàn)篇【1】Android Studio 3.0 Kotlin環(huán)境開(kāi)發(fā)https://github.com/fanyanlong/KotlinStu
Kotlin基礎(chǔ)篇【1】Android Studio 3.0 Kotlin環(huán)境配置
Kotlin基礎(chǔ)篇【2】初識(shí)Kotlin的意義
Kotlin基礎(chǔ)篇【3】Kotlin基礎(chǔ)語(yǔ)法
Kotlin基礎(chǔ)篇【4】when,if,in,is 關(guān)鍵詞