gpt4 book ai didi

android - 如何在 mvvm 架构中实现 BaseActivity?不使用依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-03 10:31:08 28 4
gpt4 key购买 nike

我目前正在学习 MVVM 架构,
我试着做一个 BaseActivity类(class)。
我的基本 Activity :-

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(不使用依赖注入(inject))

最佳答案

你覆盖了错误的onCreate

override fun onCreate(savedInstanceState: Bundle?) {
几年前我确实玩过类似的东西,你可以找到我的方法 here

关于android - 如何在 mvvm 架构中实现 BaseActivity?不使用依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64907733/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com