Autore Topic: ListView e refresh lento?  (Letto 394 volte)

Offline riddick86

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic by Google
  • Sistema operativo:
    Mac OS X Snow Leopard
ListView e refresh lento?
« il: 27 Aprile 2011, 23:35:31 CEST »
0
Salve ragazzi,
ho un problema molto strano con una ListView.
Ogni riga è composta da due Button e 3 TextView.
Alla pressione di uno dei due Button si incrementa un attributo di una classe ed in base al valore di quest'attributo cambia il testo di una delle TextView nella riga.
Accade che quando clicco ripetutamente su un bottone, ad es. quello in riga 0, a volte mi cambia il valore dell'attributo di un'altra riga a caso.
Se clicco velocemente, accade in modo più frequente.
Penso sia un problema di "lentezza" perchè se nel metodo onClick tolgo notifyDataSetChanged() tutto funziona correttamente, evitando quindi di ridisegnare tutte le View.


Vi posto il codice:
Codice (Java): [Seleziona]
import java.util.ArrayList;
import java.util.List;

import app.models.Pietanza;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.TextView;
import app.R;

public class PietanzaAdapter extends ArrayAdapter<Pietanza> {
       
        private String tag = "PietanzaAdapter";
        private int resource;
        private LayoutInflater inflater;

        public PietanzaAdapter(Context context, int resourceId, List<Pietanza> objects) {
                super(context, resourceId, objects);
                // TODO Auto-generated constructor stub
                resource = resourceId;
                inflater = LayoutInflater.from(context);
               

        }


        /* (non-Javadoc)
         * @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup)
         */

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                Pietanza pietanza = getItem(position);
               

               
                if(convertView == null){
                        convertView = inflater.inflate(resource, null);

                       

                }
               
               
                TextView pietanzaNome = (TextView) convertView.findViewById(R.id.pietanzaItemLabel);
                TextView pietanzaPrezzo = (TextView) convertView.findViewById(R.id.pietanzaPriceLabel);
                TextView pietanzaNumero = (TextView) convertView.findViewById(R.id.pietanzaNumero);
                Button buttonPiu = (Button) convertView.findViewById(R.id.buttonPiu);
                Button buttonMeno = (Button) convertView.findViewById(R.id.buttonMeno);

                buttonPiu.setTag(pietanza);
                buttonMeno.setTag(pietanza);
               
               
                if(pietanza.ordinati<=0){
                        pietanzaNome.setText(pietanza.nome);

                }
                else{
                        pietanzaNome.setText(""+pietanza.ordinati + " x "+pietanza.nome);
                        pietanzaNome.setTextColor(Color.MAGENTA);

                }


               
                pietanzaNome.setText(pietanza.nome);
                pietanzaPrezzo.setText("€ "+pietanza.prezzo);
                pietanzaNumero.setText("CODICE: "+pietanza.id);
               
               
               

                buttonPiu.setOnClickListener(new OnClickListener(){

                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub

                                Log.v(tag,"Pietanza: "+((Pietanza)v.getTag()).nome);
                                ((Pietanza)v.getTag()).ordinati++;
                                Log.v(tag, "Ordinati1: "+((Pietanza)v.getTag()).ordinati);
                                notifyDataSetChanged();
                        }
                       
                });
               
                buttonMeno.setOnClickListener(new OnClickListener(){

                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub

                                Log.v(tag,"Meno: "+((Pietanza)v.getTag()).nome);
                                if(((Pietanza)v.getTag()).ordinati > 0){
                                        ((Pietanza)v.getTag()).ordinati--;     
                                }
                               
                                Log.v(tag, "Ordinati1: "+((Pietanza)v.getTag()).ordinati);                             
                                notifyDataSetChanged();
                        }
                       
                });
               


}
« Ultima modifica: 28 Aprile 2011, 07:33:56 CEST da riddick86 »