【发布时间】:2017-08-08 20:09:17
【问题描述】:
我想知道 android 绑定是否与概念级别的实时数据兼容。 有一个简单的任务:单击按钮后调用服务器。 所以在我看来我有
android:onClick="@{viewmodel::onOrderButtonClick}"
并且在 ViewModel 中定义了正确的 onOrderButtonClick(View) 方法。 但是为了通过 LiveData 进行服务器调用,我需要我的 Fragment 引用(observe() 方法需要 LifecycleOwner 实例作为第一个参数)。 当然,我不能在我的 ViewModel 中引用片段。 这里的模式是什么?我真的需要在片段类中实现所有事件方法并将它们委托回视图模型类吗?
【问题讨论】:
-
我不会将
onOrderButtonClick()放在视图模型上。恕我直言,这是控制器或演示者操作,而不是视图模型操作。 -
@CommonsWare,我认为当您使用 android 绑定时,这是唯一的选择
-
没有。你可以绑定任何你想要的对象。如果您想绑定一个视图模型(用于填充小部件,并且可能用于通过双向绑定接收输出)和一个控制器/演示器对象(用于事件),欢迎您这样做。只需在布局中定义两者并为两者调用相应的
set...()方法即可。 -
@CommonsWare,你能给我举个例子吗?据我了解,我可以使用android绑定来实现视图和视图模型之间的双向绑定,但是要使用事件(在这种情况下为onclick),我仍然需要在片段或活动中调用findViewById()......
-
无论如何 - 我知道它是可能的,但是使用 pue android 绑定架构很简单 - 我只是在 ViewModel 中定义了 onClick() 方法,并且在那里我直接修改了 Observable 字段并且视图正在更新。使用 LiveData,我必须为每个 UI 事件调用 observe(),然后在视图模型中调用 setValue()。然后在片段类的 onChange() 方法中,我必须回调视图模型以更改可观察字段。这似乎不是很清楚和简单。这就是为什么我问这个问题那里的概念是什么
标签: android android-architecture-components android-livedata