Le mie righe contengono un pulsante che ha il proprio listener di clic impostato nel getView del mio adattatore. Sono in grado di distinguere tra i clic sui miei pulsanti e i clic effettivi delle righe utilizzando Android: descendantFocusability = "blocksDescendants" nel parent della riga.Android: pulsante Cambia sfondo in ListView Row con onClick
Quando faccio clic su un pulsante, esso imposta correttamente lo sfondo del pulsante, il mio problema è che mentre scorro l'elenco lo imposto anche per righe diverse. Presumo che il loro sia un problema da qualche parte con il riciclaggio delle visualizzazioni.
Ecco il mio codice:
@Override
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.todays_sales_favorite_row, null);
holder.favCatBtn = (Button)convertView.findViewById(R.id.favCatBtn);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.favCatBtn.setTag(position);
holder.favCatBtn.setOnClickListener(this);
return convertView;
}
@Override
public void onClick(View v) {
int pos = (Integer) v.getTag();
Log.d(TAG, "Button row pos click: " + pos);
RelativeLayout rl = (RelativeLayout)v.getParent();
holder.favCatBtn = (Button)rl.getChildAt(0);
holder.favCatBtn.setBackgroundResource(R.drawable.icon_yellow_star_large);
}
Quindi, se clicco sul pulsante in posizione di riga 1 lo sfondo del pulsante cambia come dovrebbe. Ma poi mentre scorro verso il basso la lista casuale vengono impostati anche altri pulsanti. A volte, quando ritorna alla posizione 1, lo sfondo del pulsante ritorna di nuovo all'originale.
Cosa mi manca qui? So che sono proprio qui, è solo qualcosa di minore che non sto facendo.
Quando si passa a if (true || convertView == null) {... (quindi è sempre gonfiato), funziona bene allora? Non una soluzione, voglio solo sapere se il problema non appare più. –
Sì, che impedisce lo sfondo di cambiare su altre righe casuali. Ovviamente non è la soluzione come hai detto tu, ma sì, si ferma il problema finché non faccio scorrere il backup e il pulsante ritorna allo sfondo originale. – askilondz