是什么导致TableLayout内容消失?

时间:2015-11-18 18:23:18

标签: android android-fragments android-widget

我创建了一个扩展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()来记录 - 并且它根本没有被调用。

这可能会发生什么?

1 个答案:

答案 0 :(得分:0)

事实证明我将所有内容包装在一个用android:height =&#34; match_parent&#34;设置的scrollview中。而不是wrap_content。改变了,它工作正常。