2013-01-12 10 views
7

Mam działalność, która ma TextView, i chcę aktualizować tekst stale ..Jak aktualizować TextView w działaniu stale w nieskończonej pętli?

W Javie mógłbym po prostu zrobić nieskończoną pętlę while i po prostu ustawić tekst każdej iteracji.

Ale kiedy próbuję to zrobić w Androidzie, pokazuje czarny ekran i nie ładuje nawet aktywności.

Umieszczam nieskończenie w metodzie onCreate, być może dlatego się zawiesza ... ale jeśli tak, to gdzie mam ją umieścić?

+0

Nie powinieneś mieć nieskończonej pętli, przynajmniej nie w głównym wątku. Jaki jest tego cel? :-) – ninetwozero

+0

Cóż, chcę coś zaktualizować w nieskończoność (lub co najmniej stale) – aclokay

+0

podobne: http://stackoverflow.com/questions/11295152/android-running-infinite-loop || http://stackoverflow.com/questions/1099640/main-loop-in-android –

Odpowiedz

9

użycie Handler i oddzielny wątek/runnable na aktualizację TextView stale zamiast Podczas gdy pętla:

Handler handler=new Handler(); 
handler.post(new Runnable(){ 
    @Override 
    public void run() { 
     // upadte textView here 
     handler.postDelayed(this,500); // set time here to refresh textView 
    } 
}); 
+2

+1 Pozwoli to uniknąć zablokowania głównego wątku – Joel

+3

Jeśli zamierzasz odnieść się do obsługi w ramach tego zamknięcia musisz go usunąć. – MattD

0

Minimal przykładem pracy podstawie https://stackoverflow.com/a/14295193/895245:

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.TextView; 

public class Main extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final int i = 0; 
     final TextView textView = new TextView(this); 
     textView.setText(String.format("%d", i)); 
     setContentView(textView); 
     final Handler handler = new Handler(); 
     class MyRunnable implements Runnable { 
      private Handler handler; 
      private int i; 
      private TextView textView; 
      public MyRunnable(Handler handler, int i, TextView textView) { 
       this.handler = handler; 
       this.i = i; 
       this.textView = textView; 
      } 
      @Override 
      public void run() { 
       this.handler.postDelayed(this, 500); 
       this.i++; 
       this.textView.setText(String.format("%d", i)); 
      } 
     } 
     handler.post(new MyRunnable(handler, i, textView)); 
    } 
} 

można po prostu skopiować wkleić do głównej aktywności wygenerowanej przez android create project [...], a zobaczysz licznik w swojej aplikacji.

Testowany na systemie Android 22.

Powiązane problemy