Android - как наблюдать ViewModel в анкокомпоненте
Я хочу использовать viewmodelproviders в компоненте anko
я изучил документацию ViewModel в руководстве разработчика Google, но этот конкретный вариант использования не задокументирован
class BroadcastCalendarFragment: Fragment()
{
lateinit var mBroadcastModel: BroadcastModel
override fun onCreateView(inflater: LayoutInflater, container:
ViewGroup?, savedInstanceState: Bundle?): View? {
return BroadcastCalendarUI<Fragment>().createView(AnkoContext.create(ctx, this))
}
}
class BroadcastCalendarUI<BroadcastCalendarFragment>(): AnkoComponent<BroadcastCalendarFragment>
{
lateinit var broadcastModel: BroadcastModel
override fun createView(ui: AnkoContext<BroadcastCalendarFragment>): View = with(ui) {
verticalLayout{
button.setOnclickListener{
broadcastModel = ViewModelProviders.of(BroadcastCalendarFragment()).get(BroadcastModel::class.java)
}
}
}
}
Если я нажимаю на кнопку, появляется сообщение об ошибке
java.lang.IllegalStateException: невозможно создать ViewModelProvider для отдельного фрагмента
(Высовывается в строке, где я использую ViewModelProviders(BroadcastCalendarFragment() в слушателе щелчка)
1 ответ
ViewModelProviders.of(BroadcastCalendarFragment())
создает новый BroadcastCalendarFragment
и пытается найти / создать модель представления из него. Проблема в том, что этот новый фрагмент не привязан ни к какому виду деятельности, и для этого ViewModelProviders
не может найти подходящего поставщика.
Вы должны быть в состоянии найти экземпляр фрагмента apropiate с помощью
ViewModelProviders.of(owner).get(BroadcastModel::class.java)