Autore Topic: postInvalidate() da activity  (Letto 596 volte)

Offline sergioandroid

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
postInvalidate() da activity
« il: 16 Ottobre 2011, 20:19:15 CEST »
0
salve ragazzi..
sto cercando in maniera molto semplice di "invalidare" una custom view per lanciare onDraw().. il problema è che lo vorrei fare da activity...
documentandomi ho letto che il metodo invalidate() non è statico, e deve essere dunque utilizzato postInvalidate() (che non mi porta a nessun risultato)

nell'activity, in onCreate, ho istanziato la mia view :

Codice (Java): [Seleziona]
workview = new WorkView(this);
dopo di che, tramite un menu opzioni ho:

Codice (Java): [Seleziona]
@Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                       
                case R.id.clear:
                       
                        workview.postInvalidate();                     
                }              
                return true;
        }
}

il metodo onDraw, non viene lanciato..
cosa sto dimenticando?
mi sorge il dubbio che postInvalidate funziona solo con le SurfaceView...



EDIT: risolto creando un framelayout, posto quanto ho fatto(nella speranza che possa servire a qualcuno)

Codice (Java): [Seleziona]
FrameLayout flview;
Codice (Java): [Seleziona]
 flview = (FrameLayout)findViewById(R.id.frame1);        
             flview.addView(new WorkView(getApplicationContext()));

dopo di che ho potuto lanciare:

Codice (Java): [Seleziona]
flview.postInvalidate()
sergio
« Ultima modifica: 16 Ottobre 2011, 20:34:16 CEST da sergioandroid »

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:postInvalidate() da activity
« Risposta #1 il: 16 Ottobre 2011, 22:28:52 CEST »
0
...
documentandomi ho letto che il metodo invalidate() non è statico, e deve essere dunque utilizzato postInvalidate() (che non mi porta a nessun risultato)

In realtà non è così. Invalidate() viene usato nell'UI thread, ovvero nel thread principale dell'activity. Se invece sei al di fouri dell'UI thread, per esempio in un'asynctask, per richiamare l'onDraw() devi usare il postInvalidate(). Entrambi sono metodi non statici e pubblici.  ;-)