Kotlin实现MVP设计模式

xiaoxiao2021-02-28  24

零、前言

此篇为用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() }
转载请注明原文地址: https://www.6miu.com/read-800083.html

最新回复(0)