kir*_*403 3 java data-binding android android-databinding
我已经开始在我的新应用程序中实现Android数据绑定库.但是,我在数据动态添加元素方面遇到了一些困难.在我的POJO它包含一张地图<String,Double>.这里String是用户的ID,Double是金额.我有一个用于显示单个条目的布局文件.因此,如果map包含2个元素,它将如下所示:
以前,我通过在循环内部扩展布局并LinearLayout为地图的每个项目添加来完成此操作.但是,现在我想用数据绑定来做这件事.
因为,Map可以是1到20之间的任何元素数量,默认情况下我无法添加到布局文件中.我必须根据地图中的条目进行充气.我已成功实现数据绑定与POJO没有Map.但是,无法理解如何通过数据绑定轻松完成此操作.
那么,有没有办法直接在数据绑定(在布局文件中)或在Java代码中尽可能少的代码执行此操作?
编辑:
对于所有人,谁看到它是一个简单的RecyclerView,它不是.我同意这RecyclerView是一个非常好的选择,当你有一个包含一些元素的列表并滚动时,这些视图将是性能优势.这里我在这个列表的上方和下方有不同类型的多个元素.我也使用RecyclerView了数据绑定,我知道它是如何工作的,但实际情况并非如此.我只想使用数据绑定来扩展布局(LinearLayout)中的多行.
由于您希望自己动态创建布局,我建议采用以下方法.目前这完全是理论上的,但我没有理由,为什么这不适合你.
考虑Map使用自定义属性进行绑定.
<LinearLayout ...
app:inflateData="@{dataMap}" />
Run Code Online (Sandbox Code Playgroud)
然后,您必须创建一个@BindingAdapter来处理适配器将为您执行的操作.
@BindingAdapter({"inflateData"})
public static void inflateData(LinearLayout layout, Map<String, Double> data) {
LayoutInflater inflater = LayoutInflater.from(layout.getContext());
for (Entry<String, Double> entry : data.entrySet()) {
MyItem myItem = inflater.inflate(R.layout.my_item, layout, true);
myItem.setKey(entry.getKey);
myItem.setValue(entry.getValue);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,您可以扩展项目的布局并将其添加到父布局.您可以通过向布局和绑定适配器添加更多属性来进一步概括它.
| 归档时间: |
|
| 查看次数: |
3537 次 |
| 最近记录: |