版权声明:本文为博主原创文章,转载时请著名出处:http://blog.csdn.net/dg_summer https://blog.csdn.net/DG_summer/article/details/77455581
零、前言
此篇为用kotlin实现的简单mvp设计模式,Demo功能是登录。通过此篇文章可以学习Kotlin语言基础使用,以及理解mvp设计模式。项目源码:KotlinAndroiMVP
壹、mvp简介
View层:负责视图操作
Model层:负责数据操作
Present层:管理数据,控制界面
其他详细介绍,请百度。
贰、Model数据层
- model层用于处理登录数据的接口
interface LoginModell{
fun login(username:String,password:String,listener: OnLoginFinishListener)
}
- 处理登录事件的监听者
interface OnLoginFinishListener{
fun onUsernameError()
fun onPasswordError()
fun onSuccess()
}
- model具体实现类,这里主要用来处理数据操作
class LoginModelImp : LoginModell {
override fun login(username: String, password: String, listener: OnLoginFinishListener) {
Handler().postDelayed(Runnable {
val error: Boolean = false
if (TextUtils.isEmpty(username)) {
listener.onUsernameError()
Log.d("tttt",";ddd"+username)
return@Runnable
}
if (TextUtils.isEmpty(password)) {
listener.onPasswordError()
return@Runnable
}
if (!error) {
listener.onSuccess()
}
}, 2000)
}
}
}
叁、view接口层
- LoginView里面设计的接口,主要用来处理登录的界面。登录时显示进度条,账号密码错误时的UI等
interface LoginView {
fun showProgress()
fun hideProcess()
fun setUsernameError()
fun setPasswordError()
fun navigateTohome()
}
肆、present层
- present主要用来连接view层和数据层
interface LoginPresenter {
fun validateCredentials(username: String, password: String)
fun onDestoroy()
}
- presentImp实现LoginPresenter和OnLoginFinishListener接口,并且以loginview作为关联对象。
class LoginPresentImp(loginview: LoginView) : LoginPresenter, OnLoginFinishListener {
lateinit var loginV: LoginView
var loginModel: LoginModell
init {
loginV = loginview
loginModel = LoginModelImp()
}
override fun validateCredentials(username: String, password: String) {
if (loginV != null) {
loginV.showProgress()
}
loginModel.login(username, password, this)
}
override fun onUsernameError() {
if (loginV != null) {
loginV.setUsernameError()
loginV.hideProcess()
}
}
override fun onPasswordError() {
if (loginV != null) {
loginV.setPasswordError()
loginV.hideProcess()
}
}
override fun onSuccess() {
if (loginV != null) {
loginV.navigateTohome()
loginV.hideProcess()
}
}
override fun onDestoroy() {
loginV != null
}
}
五、MainActivity实现
- 类实现Loginview,并且在实现方法中做了UI具体操作。
class MainActivity : AppCompatActivity(), LoginView {
lateinit var present: LoginPresenter
var name:String=""
var word:String=""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
init()
}
fun init(){
progress.visibility = View.GONE
present = LoginPresentImp(this)
button.setOnClickListener { view ->
name= username.text.toString()
word= password.text.toString()
present.validateCredentials(name,word)
}
}
override fun showProgress() {
progress.visibility = View.VISIBLE
}
override fun hideProcess() {
progress.visibility = View.GONE
}
override fun setUsernameError() {
toast("请输入用户名",0)
}
override fun setPasswordError() {
toast("请输入密码",0)
}
override fun navigateTohome() {
toast("登陆成功",1)
}
override fun onDestroy() {
present.onDestoroy()
super.onDestroy()
}
fun toast(message: String,time:Int) {
Toast.makeText(this, message, time).show()
}