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)
Другие вопросы по тегам