Android自定义视图子项不可见

时间:2014-01-29 15:02:22

标签: android android-custom-view redraw

我有一个名为CellView的自定义视图,它包含3个TextView个孩子。如果我在XML中创建一个新布局并运行应用程序它运行正常。

<com.example.views.CellView 
   android:layout_width="0dp"
   android:layout_height="120dp"
   android:layout_weight="1"
   custom:textTitle="My title text"
   custom:textCenter="My center text"
   custom:textFooter="My footer text" />

<com.example.views.CellView 
   android:layout_width="0dp"
   android:layout_height="120dp"
   android:layout_weight="1"
   custom:textTitle="My title text"
   custom:textCenter="My center text"
   custom:textFooter="My footer text" />

列表视图中每行有2个单元格。

我有一个ArrayAdapter,如果它是null并且传递给我的列表视图,我正在膨胀convertView。细胞是可见的,但孩子们不是!

CellView类包含每个Object的setter和getter(titleText,titleCenter,titleFooter),当我在{{{{}}中创建TextViews时,我正在调用getTitleText(),getCenterText()或getFooterText() 1}}构造函数。

CellView

ArrayAdapter 膨胀视图:

public class CellView extends LinearLayout
{
   // Objects and constructors... etc

   public void setTitleText(String titleText)
   {
      this.titleText = titleText;

      invalidate();
      requestLayout();
   }
}

我认为子文本视图没有重绘。修改对象内容(标题,中心文本或页脚文本)的每个调用都会调用ViewHolder vh; if (convertView == null) { convertView = (LinearLayout) inflater.inflate(R.layout.row_cells, null, false); vh = new ViewHolder(); vh.cellLeft = (CellView) convertView.findViewById(R.id.left); vh.cellRight = (CellView) convertView.findViewById(R.id.right); convertView.setTag(vh); } vh = (ViewHolder) convertView.getTag(); vh.cellLeft.setTitleText(getItem(pos).getTextTitle()); vh.cellLeft.setCenterText(getItem(pos).getCenterText()); vh.cellLeft.setFooterText(getItem(pos).getFooterText()); // same for right cell return convertView; invalidate()

1 个答案:

答案 0 :(得分:0)

除了 user3126670 之外,在大多数情况下,您可以将View附加到root以减少堆大小(减少布局级别):

convertView = (LinearLayout) inflater.inflate(R.layout.row_cells, parent, true);

您的布局文件应为<merge>而不是<LinearLayout>