Android使用反射机制搭建MVVM架构

使用反射机制搭建MVVM架构

Java的反射机制是指在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java的反射机制

一、搭建BaseViewModel类

继承自ViewModel

open class BaseViewModel:ViewModel() {
    
    open fun clear(){
        
    }
    
    override fun onCleared() {
        super.onCleared()
        clear()
    }
}

二、搭建BaseActivity类

继承自AppCompatActivity

abstract class BaseActivity<VB:ViewBinding,VM:BaseViewModel>:AppCompatActivity() {

    protected var viewBinding: VB? = null
    protected var mViewModel: VM? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        try {
            viewBinding = getViewBindingInstance(layoutInflater)
            mViewModel = getViewModelInstance()
            setContentView(viewBinding?.root)
            initData()
            initObserver()
            initOnListener()
        }catch (e:Exception){
            LogUtils.e("${javaClass.simpleName} onCreate: ${e.message}")
        }
    }

    private fun getViewModelInstance():VM{
        val superClass = javaClass.genericSuperclass as ParameterizedType
        val vmClass = (superClass.actualTypeArguments[1] as Class<VM>).kotlin
        return ViewModelProvider(this)[vmClass.java]
    }

    private fun getViewBindingInstance(inflater: LayoutInflater):VB{
        val superClass = javaClass.genericSuperclass as ParameterizedType
        val vbClass = superClass.actualTypeArguments[0] as Class<VB>
        val method = vbClass.getMethod("inflate", LayoutInflater::class.java)
        return method.invoke(null,inflater) as VB
    }

    override fun onDestroy() {
        super.onDestroy()
        destroy()
    }

    protected abstract fun initData()

    protected abstract fun initOnListener()

    protected abstract fun initObserver()

    open fun destroy(){}
}

三、继承BaseViewModel实现MainViewModel类

class MainViewModel:BaseViewModel() {
}

四、继承BaseActivity实现MainActivity类

class MainActivity : BaseActivity<ActivityMainBinding, MainViewModel>() {

    override fun initData() {

    }

    override fun initOnListener() {

    }

    override fun initObserver() {

    }

}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值