Sto lavorando ad una ListActivity che mostrerà un mucchio di numeri (pesi). Vorrei cambiare lo sfondo di una riga specifica in ListView. Per fare ciò ho creato un'implementazione personalizzata della classe ArrayAdapter e ho sostituito il metodo getView. L'adattatore accetta un elenco di numeri e imposta lo sfondo della riga con il numero 20 in giallo (per ragioni di semplicità).Custom ArrayAdapter setBackground in getView
public class WeightListAdapter extends ArrayAdapter<Integer> {
private List<Integer> mWeights;
public WeightListAdapter(Context context, List<Integer> objects) {
super(context, android.R.layout.simple_list_item_1, objects);
mWeights = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
int itemWeight = mWeights.get(position);
if (itemWeight == 20) {
v.setBackgroundColor(Color.YELLOW);
}
return v;
}
}
Il problema è che non solo la riga con il numero 20 diventa lo sfondo giallo, ma anche la riga con il numero 0 (la prima riga che è) e non sono sicuro perché questo è così.
Sto facendo qualcosa di sbagliato nel metodo getView (come chiamare il metodo super)? Il mio ragionamento per l'implementazione è: Tutte le visualizzazioni restituite dovrebbero essere uguali (ecco perché sto chiamando il metodo super) solo la vista che soddisfa i criteri if deve essere cambiata.
Grazie per il vostro aiuto!
Vedo. Questo avrebbe senso, sì. Quindi la domanda ora è qual è il modo migliore per risolverlo. Abbandonare convertView o impostare gli attributi di stile per entrambe le opzioni? – Igor