如何使用Android数据绑定进行for循环?

时间:2016-10-09 10:33:39

标签: android mvvm knockout.js android-databinding

大多数流行的MVVM框架允许某种类型的循环用于列表类型属性。例如,Knockout有foreach-binding。它允许您循环遍历list属性的元素,并且对于每个元素,foreach-loop中包含的标记是重复的。在副本内部,当前元素用作数据绑定的上下文。

我在Android中寻找类似的东西,但我只看到了将列表绑定到特定ui元素的可能性。但这在声明性方面很糟糕,因为我需要在代码中创建一个UI元素。

有没有办法使用Android的数据绑定功能来模拟类似的东西?如果没有,是否有解决方法?还是一种扩展绑定语法的方法?

2 个答案:

答案 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:iteratorbinding:layout属性,并在数据绑定适配器中设置RecyclerVier.Adapter