android - 如何在ankocomponent中观察viewmodel
android - how to observe viewmodel in ankocomponent
我想在 anko 组件中使用 viewmodelproviders
我研究了 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() 的那一行)
ViewModelProviders.of(BroadcastCalendarFragment())
正在创建一个新的 BroadcastCalendarFragment
并尝试从中 find/create 视图模型。问题是这个新片段没有附加到任何 activity,因此 ViewModelProviders
无法找到合适的提供者。
您应该能够通过
找到合适的片段实例
ViewModelProviders.of(owner).get(BroadcastModel::class.java)
我想在 anko 组件中使用 viewmodelproviders
我研究了 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() 的那一行)
ViewModelProviders.of(BroadcastCalendarFragment())
正在创建一个新的 BroadcastCalendarFragment
并尝试从中 find/create 视图模型。问题是这个新片段没有附加到任何 activity,因此 ViewModelProviders
无法找到合适的提供者。
您应该能够通过
找到合适的片段实例ViewModelProviders.of(owner).get(BroadcastModel::class.java)