Kotlin mvp 泛型 demo

 

Kotlin mvp 泛型 demo

github地址:https://github.com/haoda2328/mvpdemo

mvp模式已经出来很久了,最近用到了kotlin随即将kotlin版的泛型mvp写了一个demo,mvp相当于以mvc的主要差异是v 跟 p层的 依附,demo主要呈现了是activity 跟presenter的依附过程跟数据传递过程

 

1、基础 BaseView  接口定义

interface BaseView {

    fun showName(name: String)

    fun showAge(age: String)

    fun showSex(sex: String)

}

 2、基础 BasePresenter 抽象类定义

/**
 *
 * @author  hao2.ling
 * @date 2021/3/8
 * BasePresenter 要 Attach BaseView 此处持有 BaseView 的子类泛型 T
 */
abstract class BasePresenter<T : BaseView> {

    fun getView(): T? {
        return mReference?.get()
    }

    var mReference: Reference<T>? = null

    /**
     * 弱引用(WeakReference)只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
     * 软引用  (SoftReference)当内存不足时避免oom才会释放内存
     */
    fun onAttach(view: T) {
        mReference = WeakReference<T>(view)
    }

    abstract fun initData();
    abstract fun getName()
    abstract fun getAge()
    abstract fun getSex()

}

3、mvp 基础Activity    BaseActivity

abstract class BaseActivity<T : BasePresenter<BaseView>> : BaseView, AppCompatActivity() {

    protected var mPresenter: T? = null

    abstract fun initPresenter()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initPresenter();
        mPresenter?.onAttach(this);
    }
}

4、要实现的具体  StudentActivity 类  

class StudentActivity : BaseActivity<StudentPresenter>() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_student)
        mPresenter?.initData();
    }

    override fun initPresenter() {
        mPresenter = StudentPresenter()
    }


    override fun showName(name: String) {
        tv_name.text = name
    }

    override fun showAge(age: String) {
        tv_age.text = age
    }

    override fun showSex(sex: String) {
        tv_sex.text = sex
    }


}

5、具体Activiy 相对应的Presenter  StudentPresenter  ,此处的m层省略.....

class StudentPresenter : BasePresenter<BaseView>() {

    override fun initData() {
        getName()
        getAge()
        getSex()
    }

    override fun getName() {
        getView()?.showName("白云城主叶孤城")
    }

    override fun getAge() {
        getView()?.showAge("42")
    }

    override fun getSex() {
        getView()?.showSex("男")
    }


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值