大多数流行的MVVM框架允许某种类型的循环用于列表类型属性。例如,Knockout有foreach-binding。它允许您循环遍历list属性的元素,并且对于每个元素,foreach-loop中包含的标记是重复的。在副本内部,当前元素用作数据绑定的上下文。
我在Android中寻找类似的东西,但我只看到了将列表绑定到特定ui元素的可能性。但这在声明性方面很糟糕,因为我需要在代码中创建一个UI元素。
有没有办法使用Android的数据绑定功能来模拟类似的东西?如果没有,是否有解决方法?还是一种扩展绑定语法的方法?
答案 0 :(得分:2)
正如@tynn回答的那样,这种api不可用。
要获得相同的结果,您可以在XML本身中为RecyclerView设置适配器。我在MVVM库中实现了这个功能。请参阅Setup RecyclerView from XML itself。
您的XML将如下所示:
<android.support.v7.widget.RecyclerView
bind:items="@{vm.itemVms}"
bind:layout_vertical="@{true}"
bind:view_provider="@{@layout/row_item}" />
<!-- Same arguments for ViewPager-->
<android.support.v4.widget.ViewPager
bind:items="@{vm.itemVms}"
bind:view_provider="@{@layout/row_item}" />
此外,还支持基于ViewModel显示不同类型的子视图。见Using different types of child views
答案 1 :(得分:0)
它不可能存在。 android数据绑定库使用静态XML布局并将值绑定到属性。不支持动态创建静态布局,我认为永远不会。如果要动态创建视图层次结构,仍应使用带适配器的视图。这是你可以用数据绑定做的事情。只需创建自己的数据绑定适配器,即可将列表绑定到RecyclerVier
。例如,您可以绑定到一对binding:iterator
和binding:layout
属性,并在数据绑定适配器中设置RecyclerVier.Adapter
。