在Android Listview中重用视图,使用2个不同的布局

19 浏览
0 Comments

在Android Listview中重用视图,使用2个不同的布局

为了最大化 Android 列表视图的效率,我学到了只需要将与屏幕可见行数相同数量的“行”视图实例化。一旦一个视图不再显示在屏幕上,你应该在 getView 方法中重用它,检查 convertView 是 null 还是非 null。

然而,当列表需要两种不同的布局时,你该如何实现这个想法?比如说,如果列表是已完成订单和进行中订单的列表,其中一个布局用于已完成订单,另一个布局用于进行中订单。

这是一个使用该想法的示例教程。在我的情况下,我有两个行布局:R.layout.listview_item_product_completeR.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;
}

0