Autore Topic: Aggiornamento TextView da Button molto lento  (Letto 581 volte)

Offline SalvoCt

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tablet Asus
  • Sistema operativo:
    Windows 7
Aggiornamento TextView da Button molto lento
« il: 27 Luglio 2012, 17:16:47 CEST »
0
Salve ragazzi vi espongo il mio problema! Voglio realizzare un contatore/decrementatore che al touch su due bottoni (+ e -) mi incrementa/decrementa di una unità il valore di una textView. Ho pure implementato l'opzione di incrementazione veloce sull'onLongClick, però l'aggiornamento è lentissimo e soprattutto i bottoni non sono reattivi per niente! Cioè l'effetto "hover" è molto lento.
Ulteriore dettaglio : nello stesso layout ho una listview con item customizzati .
Ho capito qual'è il problema perchè facendo un debug con vari logcat mi sono accorto che ogni volta che clicco sui bottoni mi si aggiorna tutto l'adapter!!!  o_O
Mi sapreste dire perchè? Vi posto il codice ovviamente :)
PS Tutto sta dentro un fragment

Codice (Java): [Seleziona]
private Runnable mRunnable=new Runnable(){

                @Override
                public void run() {
                        if(ifIncrement)
                        {
                                UpdatePrezzo(currPrice+1);
                                mHandler.postDelayed(this,200);
                        }
                        else if(ifDecrement)
                        {
                                UpdatePrezzo(currPrice-1);
                                mHandler.postDelayed(this,200);
                               
                        }
                       
                }};

private OnTouchListener resetLongClick=new OnTouchListener(){

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                        // TODO Auto-generated method stub
                       
                        switch(v.getId())
                        {
                        case R.id.btn_add:
                                 if((event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) && ifIncrement)
                                {
                                        ifIncrement=false;
                                }
                                break;
                       
                        case R.id.btn_sott:
                                 if((event.getAction()==MotionEvent.ACTION_UP || event.getAction()==MotionEvent.ACTION_CANCEL) && ifDecrement)
                                {
                                        ifDecrement=false;
                                }
                                break;
                               
                        }
                       
                        return false;
                }};
       
       
        private OnClickListener clickBtnADD_SOTT=new OnClickListener(){

                @Override
                public void onClick(View v) {
                       
                        if(R.id.btn_add==v.getId())
                                {
                               
                                UpdatePrezzo(currPrice+1);
                                }
                        else
                        {
                       
                                UpdatePrezzo(currPrice-1);
                        }
                               
                               
                       
                }};
               
                private OnLongClickListener clickLongBtn_ADD_SOTT=new OnLongClickListener(){

                        @Override
                        public boolean onLongClick(View v) {
                                // TODO Auto-generated method stub
                                if(R.id.btn_add==v.getId())
                                {
                                   ifIncrement=true;
                                   mHandler.post(mRunnable);
                                }
                        else
                        {
                       
                                 ifDecrement=true;
                                   mHandler.post(mRunnable);
                        }
                                return true;
                        }};


        private synchronized void UpdatePrezzo(float newPrezzo)
        {
        synchronized(lock)
        {
                currPrice=newPrezzo;
                if(newPrezzo>0)
                tPrezzo.setText("€. "+newPrezzo);
                else
                        tPrezzo.setText("€. 0.0");
        }      
               
        }

Come vedete nei metodi che utilizzo per uploadare la textview non c'è traccia della lista :(
Grazie a chiunque mi sappia dare una risposta :)

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Aggiornamento TextView da Button molto lento
« Risposta #1 il: 27 Luglio 2012, 18:47:50 CEST »
0
Guardando solo il codice, nel metodo "onTouch" non ritorni "true" quando l'evento è consumato, nel metodo "onLongClick" ritorni sempre "true" anche quando l'evento non è consumato. Non ho visto se ci sono altri problemi.
adb logcat | tee /tmp/logcat | grep TAG

Offline SalvoCt

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tablet Asus
  • Sistema operativo:
    Windows 7
Re:Aggiornamento TextView da Button molto lento
« Risposta #2 il: 30 Luglio 2012, 10:07:23 CEST »
0
Guardando solo il codice, nel metodo "onTouch" non ritorni "true" quando l'evento è consumato, nel metodo "onLongClick" ritorni sempre "true" anche quando l'evento non è consumato. Non ho visto se ci sono altri problemi.

Niente da fare ho apportato le modifiche da te suggerite,ma ancora ogni volta che clicco sul button mi ricarica tutto l'adapter!

AGGIORNAMENTO:
E' l'aggiornamento della TextView che fa ricaricare l'adapter e non I Button. La lentezza del button è una conseguenza..
« Ultima modifica: 30 Luglio 2012, 10:35:12 CEST da SalvoCt »

Offline SalvoCt

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tablet Asus
  • Sistema operativo:
    Windows 7
Re:Aggiornamento TextView da Button molto lento
« Risposta #3 il: 01 Agosto 2012, 14:51:01 CEST »
0
Ragazzi ho risolto!
Settando l'altezza della listView a WRAP_CONTENT  si è sistemato tutto! Mah!