Tôi đã học được rằng để tối đa hóa hiệu quả với các bản xem danh sách Android, bạn chỉ nên có nhiều lượt xem 'tăng' khi cần để vừa với màn hình. Khi chế độ xem đã di chuyển khỏi màn hình, bạn nên sử dụng lại chế độ đó theo phương pháp getView
của mình, kiểm tra xem convertView
có bị vô hiệu hay không.Sử dụng lại các chế độ xem trong Chế độ xem danh sách Android với 2 bố cục khác nhau
Tuy nhiên, làm cách nào bạn có thể triển khai ý tưởng này khi bạn cần 2 bố cục khác nhau cho danh sách? Cho phép nói rằng một danh sách các đơn đặt hàng và 1 bố cục là cho các đơn đặt hàng đã hoàn thành và bố cục khác dành cho các đơn đặt hàng quá trình.
Đây là hướng dẫn ví dụ về ý tưởng mà mã của tôi đang sử dụng. Trong trường hợp của tôi, tôi sẽ phải bố trí 2 hàng: R.layout.listview_item_product_complete
và 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;
}
Gần đây tôi đã gặp sự cố này. Tôi đã sử dụng 2 bố trí khác nhau để điền vào một listview và nó dẫn đến tình trạng hỗn loạn hoàn toàn. Tôi đã đi qua mã của tôi một lần nữa và một lần nữa nhưng không thể làm việc ra lý do tại sao bố trí sai đã được tái sử dụng. Cuối cùng, tôi quyết định chỉ gắn bó với * một * bố trí cho mỗi danh sách, nhưng rất nhiều sửa đổi chế độ xem đó dựa trên loại mục. Có rất nhiều bạn có thể làm để chỉnh sửa các mục trong mã. –