学习了Kotlin,随便来个小案例,以MVP+Kotlin 来实现登录的一个小案例,希望对大家有所帮助,效果图:
imageMVP:
Model
Model 是用户界面需要显示数据的抽象,也可以理解为从业务数据(结果)那里到用户界面的抽象。
View
视图这一层体现的很轻薄,负责显示数据、提供友好界面跟用户交互就行。MVP下Activity和Fragment体现在了这一层,Activity一般也就做加载UI视图、设置监听再交由Presenter处理的一些工作,所以也就需要持有相应Presenter的引用。
Presenter
Presenter这一层处理着程序各种逻辑的分发,收到View层UI上的反馈命令、定时命令、系统命令等指令后分发处理逻辑交由业务层做具体的业务操作,然后将得到的 Model 给 View 显示。
Model
class ModelImple : IModel{
override fun onLogin(name: String, pwd: String,onLoginSetListenter: IModel.IOnLoginSetListenter) {
if (name.isEmpty()) {
if (onLoginSetListenter != null) {
onLoginSetListenter.onError("输入用户名为空")
return
}
}
if (pwd.isEmpty()) {
if (onLoginSetListenter != null) {
onLoginSetListenter.onError("输入密码为空")
return
}
}
if (name.equals("zq") && pwd.equals("123456")){
if (onLoginSetListenter != null)
onLoginSetListenter.onSuccess("登录成功")
}else{
if (onLoginSetListenter != null) {
onLoginSetListenter.onError("登录失败")
}
}
}
}
presenter
class Presenter : BasePerenter<IVew>(){
var Imodel: IModel? = null
init {
Imodel = ModelImple()
}
fun onLogin(name: String,pwd: String){
var iView = getView()
/*if (false){
//验证网络
if (iView != null) {
iView.onNetWork("网络未连接")
}
}*/
Imodel!!.onLogin(name,pwd,object : IModel.IOnLoginSetListenter{
override fun onSuccess(success: String) {
if (iView != null){
iView.showLoading(success)
}
}
override fun onError(error: String) {
if (iView != null){
iView.onError(error)
}
}
})
}
}
activity
class MainActivity : BaseActivity<IVew,Presenter>(),IVew{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn.setOnClickListener {
p!!.onLogin(username.text.toString(),password.text.toString())
}
}
override fun createPresenter(): Presenter {
return Presenter()
}
override fun showLoading(msg: String) {
toast(msg)
}
override fun onNetWork(net: String) {
toast(net)
}
override fun onError(error: String) {
toast(error)
}
}
由于代码太多,完整代码未给出,源码直接下载即可
源码点击下载
网友评论