我有一个名为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()
答案 0 :(得分:0)
除了 user3126670 之外,在大多数情况下,您可以将View附加到root以减少堆大小(减少布局级别):
convertView = (LinearLayout) inflater.inflate(R.layout.row_cells, parent, true);
您的布局文件应为<merge>
而不是<LinearLayout>