Saat ini saya sedang mempelajari arsitektur MVVM,

Saya mencoba membuat kelas BaseActivity.

Aktivitas Dasar Saya: -

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


}

Sekarang saya menggunakan BaseActivity ini di SplashActivity saya: -

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
    
}

Saya telah menggunakan jawaban ini sebagai referensi untuk mengimplementasikan BaseActivity.kt ini:Cara memiliki ViewModel generik di kelas BaseActivty

Namun saya mendapatkan layar putih kosong saat menjalankan aplikasi.

Bisakah Anda memberi tahu saya apa masalahnya di sini atau bagaimana membuat BaseActivity ini (tanpa menggunakan injeksi ketergantungan)

0
Pranav Choudhary 19 November 2020, 11:13

1 menjawab

Jawaban Terbaik

Anda telah mengganti onCreate yang salah

override fun onCreate(savedInstanceState: Bundle?) {

Saya bermain-main dengan sesuatu seperti itu beberapa tahun yang lalu, Anda dapat menemukan pendekatan saya di sini

1
Blackbelt 19 November 2020, 08:23