我瞭解到,爲了最大限度地提高Android列表視圖的效率,您應該只有儘可能多的虛擬「行」視圖才能適合屏幕。一旦視圖移出屏幕,您應該在getView
方法中重新使用它,檢查convertView
是否爲空。在Android Listview中重複使用2種不同佈局的視圖
但是,如果您需要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;
}
我最近自己也遇到過這個問題。我使用2種不同的佈局來填充列表視圖,導致完全無政府狀態。我一遍又一遍地檢查了我的代碼,但無法弄清爲什麼錯誤的佈局被重新使用。最後,我決定堅持每個列表只有*一個佈局,但是根據項目類型大量修改該視圖。您可以使用代碼編輯項目。 –