我有一个循环遍历列表并返回行元素的函数。
我希望将这些行逐个添加到空RelativeLayout
,以便所有行按顺序垂直显示。
但是下面的代码无效。
void setRows(RelativeLayout rowContainer, ViewHolder viewHolder,
List<RowCollection> rowCollection) {
for (int i = 0; i < rowCollection.size(); i++) {
MyRow row = new MyRow(rowCollection.get(i));
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, row.getId());
rowContainer.addView(row, params);
}
}
仅显示最后一行元素。
我猜,但不确定,这些行是相互重叠的。
答案 0 :(得分:2)
您将所有视图放置在RelativeLayout的底部,因此它们始终位于另一个之上。所以总是只有最后一个可见,因为其他的是吹它。 将您的代码更改为:
params.addRule(RelativeLayout.BELOW, iDFromPreviousView);
答案 1 :(得分:2)
更改为:
void setRows(RelativeLayout rowContainer, ViewHolder viewHolder,
List<RowCollection> rowCollection) {
MyRow lat_row=null;
for (int i = 0; i < rowCollection.size(); i++) {
MyRow row = new MyRow(rowCollection.get(i));
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
if (i == 0) {
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
}else{
//<---get the id of previous row not sure what RowCollection contains
params.addRule(RelativeLayout.ABOVE,lat_row.getId());
}
lat_row=row;
rowContainer.addView(row, params);
}
}
这将从下到上堆叠所有视图。