#android #android-fragments #viewmodel
Вопрос:
Вот мой класс ViewModel
import android.content.Context
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class ViewModel (private val context: Context) : ViewModel() {
private var leadslist = MutableLiveData<Response>()
init {
val Repository: Repository by lazy {
Repository
}
leadslist = Repository.getMutableLiveData(context)
}
fun getLeadsList(): MutableLiveData<Response> {
return leadslist
}
}
Вот как я называю это в своем Фрагменте.
viewmodel = ViewModelProvider(requireActivity()).get(ViewModel::class.java)
Я знаю, что уже есть другие ответы, но, похоже, ничего не работает. Пожалуйста, помогите. Застрял на этом довольно долго.
Я тоже пробовал ViewModelFactory.
ViewModelProvider(requireActivity(),ViewModelFactory(requireActivity())).get(ViewModel::class.java)
и использовал этот код для класса ViewModelFactory
import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
class ViewModelFactory(private val context: Context) : ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return ViewModel(context) as T
}
}
и все же это не работает.
Затем я попробовал это
viewmodel= ViewModelProvider.AndroidViewModelFactory(requireActivity().application)
.create(ViewModel::class.java)
и это снова не сработало.
И как создать этот конструктор с нулевым аргументом в моей модели представления. И почему я не могу создать экземпляр.
Кроме того, с помощью одного из подходов я смог скомпилировать и запустить, но в этом случае функция viewmodel.observe не выполнялась.
Пожалуйста, помогите. Спасибо.
Комментарии:
1. Расширьте свой класс
AndroidViewModel
-в этот момент вам больше не понадобится специальная фабрика. Я также рекомендую назвать его как-то иначе, чемViewModel
.2. Просто попробовал. Он работает без ошибок. Но он не выполняет ViewModel.observe , поэтому я не могу добавлять значения в свой адаптер из-за этого.
3. Я не знаю, что такое «это» в «это не выполняется». Вы можете увидеть примеры
AndroidViewModel
использования здесь , здесь и здесь .
Ответ №1:
Параметр context
должен быть инициализирован.
Нравится:
class ViewModel (private val context: Context = requireActivity().application) : ViewModel()