【问题标题】:How to implement a BaseActivity in mvvm architecture? Without using dependency Injection如何在 mvvm 架构中实现 BaseActivity?不使用依赖注入
【发布时间】: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


    【解决方案1】:

    你覆盖了错误的onCreate

    override fun onCreate(savedInstanceState: Bundle?) {
    

    几年前我确实玩过类似的东西,你可以找到我的方法here

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多