Android - как наблюдать ViewModel в Ankocomponent - PullRequest
0 голосов
/ 09 января 2019

я хочу использовать 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 Ответ

0 голосов
/ 09 января 2019
 ViewModelProviders.of(BroadcastCalendarFragment())

создает новый BroadcastCalendarFragment и пытается найти / создать модель представления из него. Проблема в том, что этот новый фрагмент не привязан ни к какому виду деятельности, и ViewModelProviders не может найти подходящего поставщика.

Вы сможете найти экземпляр фрагмента apropiate с помощью

.
ViewModelProviders.of(owner).get(BroadcastModel::class.java)
...