【发布时间】:2020-11-19 08:13:59
【问题描述】:
我目前正在学习 MVVM 架构,
我尝试创建一个BaseActivity 类。
我的基本活动:-
abstract class BaseActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding> :
AppCompatActivity(),
EventListener {
lateinit var binding: Binding
private var viewModel: ViewModel? = null
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
binding = DataBindingUtil.setContentView(this, layoutid)
this.viewModel = viewModel ?: getViewModel()
binding.setVariable(getBindingVariable(), viewModel)
binding.executePendingBindings()
}
@get: LayoutRes
abstract val layoutid: Int
abstract fun getViewModel(): ViewModel
abstract fun getBindingVariable(): Int
private fun getViewModelClass(): Class<ViewModel> {
val type =
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]
return type as Class<ViewModel>
}
}
现在我在我的 SplashActivity 中使用这个 BaseActivity:-
class SplashScreen : BaseActivity<SplashScreenViewModel, ActivitySplashBinding>() {
private lateinit var viewModel: SplashScreenViewModel
override fun onFailure(message: String) {
}
override fun onStarted() {
}
override fun onSuccess() {
}
override fun getViewModel(): SplashScreenViewModel {
viewModel = ViewModelProvider(this).get(SplashScreenViewModel::class.java)
return viewModel
}
override fun getBindingVariable(): Int {
return BR.splash_viewmodel
}
override val layoutid: Int
get() = R.layout.activity_splash
}
我使用这个答案作为参考来实现这个BaseActivity.kt:How to have generic ViewModel in BaseActivty class
但我在运行应用程序时遇到空白屏幕。
你能告诉我这里有什么问题或者如何制作这个 BaseActivity(不使用依赖注入)
【问题讨论】:
标签: android mvvm android-mvvm