简体   繁体   中英

How to implement a BaseActivity in mvvm architecture? Without using dependency Injection

I am currently learning MVVM architecture,

I tried to make a BaseActivity class.

My 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>
    }


}

Now I am using this BaseActivity in my SplashActivity:-

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
    
}

I have used this answer as a reference to implement this BaseActivity.kt : How to have generic ViewModel in BaseActivty class

But I am getting a blank white screen while running the app.

Can you please tell me what is the problem here or how to make this BaseActivity (without using dependency injection)

you have overridden the wrong onCreate

override fun onCreate(savedInstanceState: Bundle?) {

I did play around with something like that few years ago, you can find my approach here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM