Tôi đang gặp sự cố với một số mã BaseAdapter mà tôi đã thích nghi từ một cuốn sách. Tôi đã sử dụng các biến thể của mã này trên khắp nơi trong ứng dụng của tôi, nhưng chỉ mới nhận ra khi cuộn một danh sách dài các mục trong ListView trở nên lộn xộn và không phải tất cả các phần tử được hiển thị.BaseAdapter khiến ListView bị lỗi khi cuộn
Rất khó để mô tả hành vi chính xác, nhưng thật dễ dàng để xem bạn có sắp xếp danh sách 50 mục và bắt đầu cuộn lên và xuống.
class ContactAdapter extends BaseAdapter {
ArrayList<Contact> mContacts;
public ContactAdapter(ArrayList<Contact> contacts) {
mContacts = contacts;
}
@Override
public int getCount() {
return mContacts.size();
}
@Override
public Object getItem(int position) {
return mContacts.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if(convertView == null){
LayoutInflater li = getLayoutInflater();
view = li.inflate(R.layout.groups_item, null);
TextView label = (TextView)view.findViewById(R.id.groups_item_title);
label.setText(mContacts.get(position).getName());
label = (TextView)view.findViewById(R.id.groups_item_subtitle);
label.setText(mContacts.get(position).getNumber());
}
else
{
view = convertView;
}
return view;
}
}
Ồ, tôi hiểu. Vì vậy, ListView chỉ chứa tối đa số lần xem cần thiết để lấp đầy màn hình? –
@Mr. Không rõ ràng: Nhiều hay ít. Nó có thể bộ nhớ cache một cặp vợ chồng để có thể phản ứng nhanh chóng để di chuyển yêu cầu. Tuy nhiên, trong một 'ListView' với không gian giao diện người dùng cho 10 hàng và một' Bộ điều hợp' của 1.000 hàng, số lượng 'Số lần xem' sẽ đến gần hơn 10 so với 1.000. Có lẽ như 12 hoặc 14. Đó là điểm của hàng tái chế với 'convertView', do đó, Android không phải tạo (và sau này GC) một mớ hỗn độn toàn bộ các tiện ích hàng. – CommonsWare