代码如下
abstract class BaseActivity<VM : BaseViewModel,VB : ViewBinding> : AppCompatActivity() {
protected lateinit var viewModel: VM
lateinit var binding: VB
var context: Context? = null
//初始化布局
abstract fun initView(savedInstanceState: Bundle?)
abstract fun initData()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initViewBinding()
//初始化上下文
context = application
//初始化控件
initView(savedInstanceState)
//初始化数据
initData()
}
private fun initViewBinding() {
binding = inflateBinding()
setContentView(binding.root)
createViewModel()
}
protected abstract fun inflateBinding(): VB
//页面跳转
open fun activityStart(ctx: Context, clazz: Class<Any>) {
var intent = Intent()
intent.setClass(ctx, clazz)
startActivity(intent)
overridePendingTransition(0, 0)
}
protected open fun viewModelFactory(): ViewModelProvider.Factory = ViewModelFactory()
/**
* 创建 ViewModel
*/
@Suppress("UNCHECKED_CAST")
private fun createViewModel() {
val type = javaClass.genericSuperclass
if (type is ParameterizedType) {
val tp = type.actualTypeArguments[0]
val tClass = tp as? Class<VM> ?: BaseViewModel::class.java
viewModel = ViewModelProvider(this, viewModelFactory()).get(tClass) as VM
}
}
}