Closed RezMike closed 3 years ago
VBActivity:
import android.os.Bundle import android.view.LayoutInflater import android.view.View import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModelProvider import dev.icerock.moko.mvvm.viewmodel.ViewModel abstract class VBActivity<VB : Any, VM : ViewModel> : AppCompatActivity() { protected lateinit var viewModel: VM protected lateinit var binding: VB protected abstract val viewModelClass: Class<VM> protected abstract fun viewModelFactory(): ViewModelProvider.Factory protected abstract fun viewBinding(layoutInflater: LayoutInflater): VB protected abstract fun VB.root(): View override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) viewModel = ViewModelProvider(this, viewModelFactory())[viewModelClass] binding = viewBinding(layoutInflater) setContentView(binding.root()) } }
VBEventsActivity:
import android.os.Bundle import dev.icerock.moko.mvvm.dispatcher.EventsDispatcherOwner import dev.icerock.moko.mvvm.viewmodel.ViewModel abstract class VBEventsActivity<VB : Any, VM, Listener : Any> : VBActivity<VB, VM>() where VM: ViewModel, VM : EventsDispatcherOwner<Listener> { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @Suppress("UNCHECKED_CAST") viewModel.eventsDispatcher.bind(this, this as Listener) } }
VBActivity:
VBEventsActivity: