Autore Topic: Aggiornare l'interfaccia dentro un loop  (Letto 340 volte)

Offline Ottavio

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Aggiornare l'interfaccia dentro un loop
« il: 10 Luglio 2014, 16:49:02 CEST »
0
Ciao a tutti.
Vi è mai capitato di dover aggiornare la ui dentro un ciclo?
Se ad esempio in un ciclo volessi aggiornare una textview, ciò che accade è che si aggiorna solo alla fine, visualizzando l'ultimo valore.
Le ho provate tutte, leggendo sui forum... runnable, handler.... ma niente.
V'inserisco un codice di esempio... illuminatemi :)
Codice (Java): [Seleziona]
public class Main extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                final TextView text = (TextView) findViewById(R.id.textView1);
                for (int i = 0; i < 5; i++) {
                        text.posetText(String.valueOf(j));
                        Log.i("Test n: ", String.valueOf(j));
                        try {
                                Thread.sleep(800);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }
                }
        }
}

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 716
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Aggiornare l'interfaccia dentro un loop
« Risposta #1 il: 10 Luglio 2014, 17:21:22 CEST »
0
Non è facile perché non dovresti averne bisogno.

L'unico caso in cui hai bisogno di aggiornare la UI all'interno di un ciclo è perché stai eseguendo un task asincrono (tipo un caricamento via web), e per queste esigenze esistono classi apposite tipo AsyncTask.

Premesso che quanto detto non è la domanda alla tua risposta, se alla luce di questi fatti hai ancora bisogno di aggiornare la UI all'interno di un ciclo fammi sapere che mi documento perché su due piedi non saprei come fare :D
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aggiornare l'interfaccia dentro un loop
« Risposta #2 il: 10 Luglio 2014, 17:23:54 CEST »
+2
Perdona se te lo dico, ma nel tuo codice ci sono cose da NON fare MAI.

Prima cosa: Sei nella OnCreate(), la callback che viene chiamata alla creazione dell'activity. Ci devi mettere tutto quello che deve essere eseguito una sola volta (per esempio, non viene richiamata quando l'activity torna da background). Il consiglio è di studiare 5 minuti il ciclo di vita delle activity.

Seconda cosa: L'istruzione Thread.sleep() è il modo più sbagliato che ci sia per fare un ritardo e per giunta non puoi "aspettare" dentro il thread di UI, perchè dopo 5 secondi (o 10 non ricordo) l'activity viene distrutta dicendo che l'app non risponde.

Un modo per fare quello che ti serve è questo: dentro la OnCreate() istanzi un handler e mandi all'handler un postMessageDelayed() con ritardo di 800ms, quindi gestisci l'arrivo di questo messaggio impostando la TextView e re-inviando un altro postMessageDelayed(), e così via finchè ti serve.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Ottavio

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:Aggiornare l'interfaccia dentro un loop
« Risposta #3 il: 11 Luglio 2014, 00:57:14 CEST »
0
Ciao, grazie per le risposte.
Bradipao puoi farmi un piccolo esempio per favore?

Offline Ottavio

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:Aggiornare l'interfaccia dentro un loop
« Risposta #4 il: 12 Luglio 2014, 19:50:06 CEST »
0
Ciao,
Forse sono io ma anche con l'handler il risultato non cambia