根据百度百科中:
view:指用户看到的界面,在视图中并没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。
model:指模型业务规则,也就是处理任务。
controller:指控制器接受用户输入并调用模型和视图去完成用户的需求,且控制器本身不输出任何东西和做任何处理,它只是接受请求并决定调用哪个模型去处理请求,然后再确定用哪个视图来显示返回的数据。
原文:MVC框架_百度百科
于是我按着这也的思想写了一下代码,模拟网络请求,如下
Model层:
import android.os.Handler
class MainModel {
/**
* mode只处理业务规则
* **/
fun getData(callback: OnDataCallback) {
val handler = Handler()
Thread {
Thread.sleep(3000)
handler.post {
callback.onResult(listOf("1", "2", "3"))
}
}.start()
}
}
View层:
import android.app.Activity
import android.app.ProgressDialog
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
class MainActivity: Activity() {
private lateinit var controller: MainController
private lateinit var model: MainModel
private lateinit var progressDialog: ProgressDialog
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
progressDialog = ProgressDialog(this)
progressDialog.setMessage("加载中")
progressDialog.setCancelable(false)
model = MainModel()
controller = MainController(this, model)
val button = Button(this)
button.text = "test"
button.setOnClickListener {
progressDialog.show()
controller.loadData()
}
setContentView(button)
}
fun onLoadDataResult(data: List<String>?) {
progressDialog.dismiss()
Toast.makeText(this, "显示返回的数据", Toast.LENGTH_LONG).show()
}
override fun onDestroy() {
super.onDestroy()
progressDialog.dismiss()
}
}
Controller层:
class MainController(private val view: MainActivity, private val model: MainModel) {
/**
* controller只接收请求并决定调用哪个模型去处理请求,
* 然后再决定用哪个视图来显示返回的数据
* **/
fun loadData() {
model.getData(object : OnDataCallback {
override fun onResult(data: List<String>?) {
view.onLoadDataResult(data)
}
})
}
}