在具有 2 种不同布局的 Android Listview 中重用视图
2022-09-01 03:33:10
我了解到,为了最大限度地提高Android列表视图的效率,您应该只拥有适合屏幕所需的膨胀“行”视图。将视图移出屏幕后,应在方法中重用它,检查是否为 null。getView
convertView
但是,当您需要2个不同的列表布局时,如何实现这个想法?假设它是一个订单列表,1 个布局用于已完成的订单,另一个布局用于处理中的订单。
这是我的代码正在使用的想法的示例教程。在我的情况下,我将有2行布局:和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 { // must be 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 using different views for each type, use an if statement to test for type, like above
holder.mNameTextView.setText(thisOrder.getNameValue());
holder.mImgImageView.setImageResource(thisOrder.getIconValue());
return convertView;
}
public static class ViewHolder {
public TextView mNameTextView;
public ImageView mImgImageView;
}