在Android Listview中重用视图,使用2个不同的布局
在Android Listview中重用视图,使用2个不同的布局
为了最大化 Android 列表视图的效率,我学到了只需要将与屏幕可见行数相同数量的“行”视图实例化。一旦一个视图不再显示在屏幕上,你应该在 getView
方法中重用它,检查 convertView
是 null 还是非 null。
然而,当列表需要两种不同的布局时,你该如何实现这个想法?比如说,如果列表是已完成订单和进行中订单的列表,其中一个布局用于已完成订单,另一个布局用于进行中订单。
这是一个使用该想法的示例教程。在我的情况下,我有两个行布局:R.layout.listview_item_product_complete
和 R.layout.listview_item_product_inprocess
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); if(getItemViewType(position) == COMPLETE_TYPE_INDEX) { convertView = mInflator.inflate(R.layout.listview_item_product_complete, null); holder.mNameTextView = (TextView) convertView.findViewById(R.list.text_complete); holder.mImgImageView = (ImageView) convertView.findViewById(R.list.img_complete); } else { // 必须是 INPROCESS_TYPE_INDEX convertView = mInflator.inflate(R.layout.listview_item_product_inprocess, null); holder.mNameTextView = (TextView) convertView.findViewById(R.list.text_inprocess); holder.mImgImageView = (ImageView) convertView.findViewById(R.list.img_inprocess); } convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } thisOrder = (Order) myOrders.getOrderList().get(position); // 如果每种类型使用不同的视图,请使用 if 语句测试类型,就像上面的示例一样 holder.mNameTextView.setText(thisOrder.getNameValue()); holder.mImgImageView.setImageResource(thisOrder.getIconValue()); return convertView; } public static class ViewHolder { public TextView mNameTextView; public ImageView mImgImageView; }