Si verificano problemi con il codice di BaseAdapter adattato da un libro. Sto usando le varianti di questo codice dappertutto nella mia applicazione, ma appena realizzato quando si scorre un lungo elenco gli elementi in ListView diventano confusi e non tutti gli elementi vengono visualizzati.BaseAdapter che provoca l'eliminazione dell'ordine di ListView durante lo scorrimento
È molto difficile descrivere il comportamento esatto, ma è facile vedere se si prende una lista ordinata di 50 articoli e si inizia a scorrere su e giù.
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;
}
}
Oh, capisco. Quindi ListView contiene solo al massimo il numero di visualizzazioni necessarie per riempire lo schermo? –
@Mr. Ambiguo: più o meno. Può memorizzare una coppia in cache per poter reagire rapidamente per scorrere le richieste. Tuttavia, in un 'ListView' con spazio UI per 10 righe e un' Adapter' di 1.000 righe, il numero di 'Views' sarà molto più vicino a 10 di 1,000. Probabilmente come 12 o 14. Questo è il punto di riciclo delle righe con 'convertView', quindi Android non deve creare (e successivamente GC) un intero pasticcio di widget di riga. – CommonsWare