Ho un listview con un arrayadapter personalizzato che gestisce circa 15 stringhe. Lo stile di ogni riga si alterna (tra etichette e valori per quelle etichette - ad esempio la riga 1 potrebbe essere "indirizzo email" e la riga 2 sarebbe l'indirizzo email effettivo). Sto cambiando lo stile di ogni riga per alternare in questo modo nel metodo getView() dell'arrayadapter. Quindi se l'articolo nella posizione corrente è un'etichetta, cambierò lo stile dallo stile di riga predefinito (che è quello che i valori hanno applicato a loro). Quando la listview viene caricata per la prima volta, lo styling è perfetto e proprio come voglio che sia. Se faccio scorrere l'elenco lentamente verso l'alto o verso il basso, rimane in questo modo. Tuttavia, se faccio scorrere l'elenco rapidamente verso l'alto e verso il basso, lo stile delle righe dei valori inizia a cambiare a quello delle etichette finché tutte le righe hanno lo stile di una riga di etichette. Qualcuno sa perché questo sarebbe successo? Ho usato adattatori personalizzati su altre visualizzazioni di elenco nell'app senza problemi come questo.Quando scorro un listview con un adattatore personalizzato troppo veloce su e giù, getView() inizia a comportarsi in modo strano. Perché?
Modifica: è stato rilevato che modifica anche tutte le righe dello stile dell'etichetta in verticale -> modifiche all'orientamento orizzontale. Non lo fa su landscape-> portrait changes. Di seguito è riportato l'adattatore che sto utilizzando. Mi sto perdendo qualcosa?
public class DetailsAdapter extends ArrayAdapter<String> {
private TextView text = null;
private String item = null;
public DetailsAdapter(Context context, int resource, int textViewResourceId, String[] objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
text = (TextView) super.getView(position, convertView, parent);
item = getItem(position);
if (item.equals("Name") || item.equals("Mobile") || item.equals("Home") || item.equals("Email") || item.equals("Address")) {
text.setBackgroundColor(0xFF575757);
text.setTextSize(15);
text.setTypeface(null, Typeface.BOLD);
text.setPadding(8, 5, 0, 5);
} else {
text.setPadding(15, 15, 0, 15);
}
return text;
}
@Override
public boolean isEnabled(int position) {
item = getItem(position);
if (item.equals("Name") || item.equals("Mobile") || item.equals("Home") || item.equals("Email") || item.equals("Address")) {
return false;
} else {
return true;
}
}
}
Puoi mostrare il tuo codice getView? –
Inizialmente quante righe verranno presentate quando viene caricato listview. La creazione di una vista per una riga utilizzando il metodo getview di customadapter è un'attività che richiede molta memoria. Questo è il motivo per il rendering confuso delle tue etichette. Scrivi scorci del tuo codice .. Potrebbe essere una soluzione –