MVP

作者: Davisxy | 来源:发表于2019-08-18 17:54 被阅读0次
MVP.png

案例分享:https://blog.csdn.net/qq_34023088/article/details/81027384

IP:

abstract class IPresenter<T : IView>(v: T) {
    open var mView: SoftReference<T> = SoftReference(v)
    open fun onCreate(intent: Intent?) {
        mView.get()?.initView()
    }
}

IV:

interface IView {
    val mPresenter: IPresenter<out IView>
    fun initView()
    fun showProgressDialog(){}
    fun dismissProgressDialog(){}
    fun showToast(text:String,context: Context,time:Int=Toast.LENGTH_SHORT){
        Toast.makeText(context,text,time).show()
    }
}

BaseActivity

abstract class BaseActivity: Activity(), IView {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(getLayoutId())
        addPresenters()
        mPresenter.onCreate(intent) }
    }
    abstract fun getLayoutId():Int
    override fun showProgressDialog() {
        super.showProgressDialog()
    }
    override fun dismissProgressDialog() {
        super.dismissProgressDialog()
    }
}

XXXModel

object UserModel {
    fun addUser(name : String ,listener : (Boolean) -> Unit){
          //做一些没什么耗时或者具体的任务,比如添加用户
          Thread.sleep(3000)
           if(name=="礼拜"){
                  listener(true)
           }else{
                  listener(false)
           }
    }
}

XXXConstact

interface UserContract {
    interface IUserView : IView {
        fun showAddUserResult(boolean: Boolean)
    }
    interface IUserPresenter{
        fun addUser(name:String)
    }
}

XXXPresenter

class UserPresenter(view: UserContract.IUserView):UserContract.IUserPresenter, IPresenter<UserContract.IUserView>(view) {
    override fun addUser(name: String) {
        //弹出对话框
        mView.get()?.showProgressDialog()
        //做一些校验
        if (!TextUtils.isEmpty(name)){
            UserModel.addUser(name) {
                //关闭对话框并显示结果
                mView.get()?.dismissProgressDialog()
                mView.get()?.showAddUserResult(it)
            }
        }
    }
}

XXXActivity

class MainActivity: BaseActivity(),UserContract.IUserView {
    override val mPresenter: UserPresenter= UserPresenter(this)
    override fun getLayoutId(): Int = R.layout.activity_main
    override fun initView() {
        tvUser.setOnClickListener {
            mPresenter.addUser("卡丽熙")
        }
    }
    override fun showAddUserResult(boolean: Boolean) {
        if (boolean){
            tvUser.text = "添加用户成功"
        }else{
            tvUser.text = "添加用户失败"
        }
    }
}

相关文章

  • Android MVP

    Android MVP初探 Android MVP进阶 Android MVP高级 Android MVP扩展

  • MVP / RxJava / Retrofit / RxBus

    MVP Android MVP 详解(上) Android MVP 详解(下) Android中的MVP模式,带实...

  • 一套完整的Android通用框架

    转自吴小龙同学的博客 MVP模式 MVP简介 Android MVP Sample,MVP+Retrofit+Rx...

  • MVP简单尝试

    MVP模式解析 标签: Android 架构 MVP MVP模式的核心思想 MVP将Activity中的U...

  • MVP基础架构

    MVP 是什么 基础架构 登录例子 MVP的优缺点 一、MVP 是什么 MVP全名是 Model - View -...

  • android 安卓 mvp mvvm - mvp

    android 安卓 mvp mvvm - mvpandroid 安卓 mvp mvvm - mvvm MVP M...

  • MVP架构

    目录 1)MVP简介2)MVP实例 1)MVP简介 MVP模式将Activity中的业务逻辑全部剥离出来,Acti...

  • MVC和MVP

    Android mvp 架构的自述 如何更高效的使用MVP以及官方MVP架构解析 老的MVC架构 新的MVP架构 ...

  • MVP系列-Android平台-第1讲-初探MVP

    MVP系列-Android平台-第1讲-初探MVP 内容一:什么是MVP?什么是MVC? 第一点:什么是MVP? ...

  • MVP框架学习

    一、MVP介绍 二、为什么使用MVP模式 三、MVP与MVC的异同 四、使用MVP实现Android的登录的Dem...

网友评论

      本文标题:MVP

      本文链接:https://www.haomeiwen.com/subject/caxdsctx.html