Aggiornamento Android TextView in Thread e Runnable

Vorrei fare un semplice timer in Android che aggiorna un TextView each secondo. Contava semplicemente secondi come nel Minesweeper.

Il problema è quando ignoro il tvTime.setText (…) (renderlo //tvTime.setText (…), in LogCat verrà printingto il seguente numero each secondo. Ma quando voglio impostare questo numero in un TextView (creato in un'altra discussione), il programma si blocca.

  • Come impostare lo stile di gradiente per dipingere l'object?
  • Come get il tipo di carattere predefinito del dispositivo Android?
  • Come posso rilevare EditText mirato in android?
  • Come posso verificare se Chrome support le tabs personalizzate di Chrome?
  • Server C2DM con errore PHP 401
  • Qual è la differenza tra Progressbar e progressDialog?
  • Qualcuno ha un'idea come risolvere facilmente questo problema?

    Ecco il codice (il metodo è chiamato all'avvio):

    private void startTimerThread() { Thread th = new Thread(new Runnable() { private long startTime = System.currentTimeMillis(); public void run() { while (gameState == GameState.Playing) { System.out.println((System.currentTimeMillis() - this.startTime) / 1000); tvTime.setText("" + ((System.currentTimeMillis() - this.startTime) / 1000)); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); th.start(); } 

    EDIT:

    Alla fine l'ho ottenuto. Ecco la soluzione per coloro che sono interessati.

     private void startTimerThread() { Thread th = new Thread(new Runnable() { private long startTime = System.currentTimeMillis(); public void run() { while (gameState == GameState.Playing) { runOnUiThread(new Runnable() { @Override public void run() { tvTime.setText(""+((System.currentTimeMillis()-startTime)/1000)); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); th.start(); } 

  • Come avviare il client di posta elettronica direttamente alla visualizzazione in arrivo?
  • Larghezza e altezza massima per ImageView in Android
  • uso android: onClick con i methods di un'altra attività?
  • Come get il pixel delle telecamere
  • Android Salvare le immagini su SQLite o SDCard o memory
  • Grafico a linee con aChartengine
  • 4 Solutions collect form web for “Aggiornamento Android TextView in Thread e Runnable”

    L'UserInterface può essere aggiornato solo dalla Thread UI. Hai bisogno di un Gestore per submit alla discussione UI:

     private void startTimerThread() { Handler handler = new Handler(); Runnable runnable = new Runnable() { private long startTime = System.currentTimeMillis(); public void run() { while (gameState == GameState.Playing) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } handler.post(new Runnable(){ public void run() { tvTime.setText("" + ((System.currentTimeMillis() - this.startTime) / 1000)); } }); } } }; new Thread(runnable).start(); } 

    In alternativa, puoi anche farlo nel tuo thread each volta che desideri aggiornare un elemento UI:

     runOnUiThread(new Runnable() { public void run() { // Update UI elements } }); 

    Non è ansible accedere agli elementi UI da thread non UI. Prova a circoscrivere la chiamata a setText(...) con un altro Runnable e quindi esaminare il View.post(Runnable) .

    Come opzione utilizzare runOnUiThread () per modificare le properties; di visualizzazione nel thread principale.

      runOnUiThread(new Runnable() { @Override public void run() { textView.setText("Stackoverflow is cool!"); } }); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.