Тип страницы
enum class PageType {
Page1, Page2, Page3;
}
val PageType.viewModelClass: KClass<out GenericViewModel>
get() = when (this) {
PageType.Page1 -> Page1ViewModel::class
// todo
}
Модель просмотра
abstract class GenericViewModel<T>() : BaseViewModel() {
abstract val pageType: PageType
}
class Page1ViewModel @Inject constructor() : GenericViewModel() {
override val pageType: PageType = PageType.Page1
}
Фрагмент
class PageFragment : BaseFragment() {
private val pageType: PageType by lazy {
TODO("read from arguments bundle")
}
private val vm: GenericViewModel by lazy {
ViewModelProvider(this, viewModelFactory).get(pageType.viewModelClass.java)
}
companion object {
fun newInstance(type: PageType): PageFragment {
TODO("add type into bundle and set as arguments")
}
}
}
Если ваша текущая установка кинжала работает для моделей просмотра, вам не нужно делать ничего особенного для поддержки этого шаблона.