我创建了一个扩展TableLayout的视图。列数由XML属性确定。我在视图上有一个方法,它将列表作为输入,并动态构建表行和单元格(对行布局进行精简,添加行,扩充单元格布局,将行添加到行中),并执行一些其他内务操作 - 这很简单。
public class MyTable extends TableLayout {
private int columns = 1;
public MyTable(Context context) {
this(context,null);
}
public MyTable(Context context, AttributeSet attrs) {
super(context,attrs);
if (attrs != null) {
TypedArray a = context.obtainStyledAttributes(atters, R.styleable.MyTable);
if (a.hasValue(R.styleable.MyTable_columns)) {
columns = a.getInt(R.styleable.MyTable_columns, 1);
this.setWeightSum(columns);
}
a.recycle();
}
}
public void populate(List<x> items) {
// remove any children, if this was already populated.
this.removeAllViews();
if (items == null || items.size == 0) {
// nothing to do here.
return;
}
int rows = 1;
if (items.size() > columns) {
rows = Math.max(1, items.size / columns + items.size() % columns);
}
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
for (int i = 1; i <= rows; i++) {
TableRow tableRow = (TableRow)layoutInflater.inflate(R.layout.item_row,this,false);
this.addView(tableRow);
int start = (i-1)*columns;
int end = Math.min(items.size()-1,(i * columns)-1);
for (;start <=end;start++) {
LinearLayout cell = (LinearLayout)layoutInflater.inflate(R.layout.item_cell,tableRow,false);
tableRow.addView(cell);
}
}
}
}
我正在片段中使用该小部件。该片段的布局包括我的小部件的一个实例,它似乎工作得很好 - 我传入我的列表,表填充,一切都是笨拙的dory - 直到我采取一个动作导致视图中的另一个组件被隐藏。例如,我有一个按钮可以执行某些操作,然后将其自身设置为View.GONE。发生这种情况时,我的表格布局会从视图中消失。如果我执行另一个操作来修改另一个组件的可见性,它会回来,之后它似乎会一直存在。我已经进行了三重检查,而且我没有在MyTable上设置可见性,而且我甚至超越了setVisibility()来记录 - 并且它根本没有被调用。
这可能会发生什么?
答案 0 :(得分:0)
事实证明我将所有内容包装在一个用android:height =&#34; match_parent&#34;设置的scrollview中。而不是wrap_content。改变了,它工作正常。