如何使用 Android 数据绑定进行 for 循环?
How can I do for-loops with Android databinding?
最流行的 MVVM 框架允许对列表类型属性进行某种循环。例如,Knockout 有 foreach-binding。它允许您遍历列表 属性 的元素,并且对于每个元素,包含在 foreach 循环中的标记被复制。在副本中,当前元素用作数据绑定的上下文。
我在 Android 中寻找类似的东西,但我只看到了将列表绑定到特定 ui 元素的可能性。但这在声明性方面很糟糕,因为我需要在代码中创建一个 UI 元素。
有没有办法使用 Android 中的数据绑定功能来模拟类似的东西?如果没有,是否有解决方法?或者扩展绑定语法的方法?
这是不可能的。 android 数据绑定库使用静态 XML 布局并将值绑定到属性。不支持动态创建静态布局,我认为永远不会。如果您想动态创建视图层次结构,您仍然应该使用带有适配器的视图。这是你可以用数据绑定做的事情。只需创建您自己的数据绑定适配器以将列表绑定到 RecyclerVier
。例如,您可以绑定到一对 binding:iterator
和 binding:layout
属性,并在数据绑定适配器中设置 RecyclerVier.Adapter
。
正如@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
最流行的 MVVM 框架允许对列表类型属性进行某种循环。例如,Knockout 有 foreach-binding。它允许您遍历列表 属性 的元素,并且对于每个元素,包含在 foreach 循环中的标记被复制。在副本中,当前元素用作数据绑定的上下文。
我在 Android 中寻找类似的东西,但我只看到了将列表绑定到特定 ui 元素的可能性。但这在声明性方面很糟糕,因为我需要在代码中创建一个 UI 元素。
有没有办法使用 Android 中的数据绑定功能来模拟类似的东西?如果没有,是否有解决方法?或者扩展绑定语法的方法?
这是不可能的。 android 数据绑定库使用静态 XML 布局并将值绑定到属性。不支持动态创建静态布局,我认为永远不会。如果您想动态创建视图层次结构,您仍然应该使用带有适配器的视图。这是你可以用数据绑定做的事情。只需创建您自己的数据绑定适配器以将列表绑定到 RecyclerVier
。例如,您可以绑定到一对 binding:iterator
和 binding:layout
属性,并在数据绑定适配器中设置 RecyclerVier.Adapter
。
正如@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