как использовать viewmodel с помощью ktx?

#android #kotlin #generics

#Android #kotlin #дженерики

Вопрос:

Я хочу использовать его как официальный сайт val viewModel by viewModels { SavedStateViewModelFactory(application, this) }


Да, это намного проще, чем использовать ViewModelProvider...


Мы все знаем, что ViewModel может быть инкапсулирован в базовый фрагмент, поэтому я хочу знать, как его инкапсулировать by viewmodels .


Я попытался инкапсулировать базовый фрагмент, но у меня возникла проблема с дженериками


точно так же, как показано ниже:
мой базовый фрагмент:

 abstract class AbsFragment444<DB :ViewDataBinding, VM :ViewModel> :Fragment(){ 

    ***//other var
    ***//other var
    ***//other var

      
    protected  val mViewModel: VM by    viewModels(this,SavedStateViewModelFactory(requireActivity().application,this))
}
 

Однако компилятор запрашивает: cannot use 'VM' as modified type parameter. Use a class instead

Что мне делать?

Комментарии:

1. Попробуйте эту строку абстрактного кода val ViewModel: Class<VM>

2. Я попробовал, затем компилятор запрашивает в ViewModels : Type parameter bound for VM in inline fun <reified VM : ViewModel> Fragment.viewModels(noinline ownerProducer: () -> ViewModelStoreOwner = ..., noinline factoryProducer: (() -> ViewModelProvider.Factory)? = ...): Lazy<VM> is not satisfied: inferred type Class<VM> is not a subtype of ViewModel

3. by viewModels должен знать конкретный тип, который он создает. Поскольку ваш абстрактный класс не может этого знать, это невозможно.

4. спасибо, теперь я изменил его на ‘ViewModelProvider …’