TextView aktualisieren

  • Antworten:7
  • OffenNicht stickyNicht beantwortet

27.04.2012 13:16:31 via Website

Tach zusammen,

ich habe eine Klasse in der ich einen einfachen counter habe der einen Wert in einer Schleife inkrementiert.
Die Zwischenwerte z.B. von 0-20, möchte ich in einer TextView ausgegeben haben. D.h. die TextView soll jeweils mit dem neuen Wert aktualisiert werden.

Um die ganze Sache auf den Punkt zu bringen hier ein Code wie ich mir das ungefähr vorstelle

1int i = 0;
2 while( i <= 20 ){
3 tv.setText(Integer.toString(i));
4 i++;
5 }

Ich glaube es ist nun klar was ich machen will.

ich habe es z.B mit einem handler probiert

1int i = 0;
2while ( i <= 20 ) {
3 handler.post(new Runnable() {
4 public void run(){
5 tv.setText(..);
6 }
7 });
8}

was hier ein recht unsauberes beispiel ist aber ich will nur herausfinden wie ich ein TextField updaten bzw. aktualisieren kann.
Vielleicht kann mir jemand einen Tip geben.

— geändert am 27.04.2012 13:17:26

27.04.2012 14:05:04 via Website

Nun das Problem ist das es so nicht läuft..

ich habe inzwischen ein Möglichkeit gefunden dass es funktioniert aba soviel ich weiss ist das kein richtiger android-code. hier mal meine lösung:


1public class Activity...
2..
3public void onCreate(...){
4 tv = (TextView)findViewById(R.id.text);
5 Thread myThread = new Thread(new MyThread());
6 myThread.start();
7}

Dieser Threadaufruf ist in Android so nicht gern gesehen hat mir einer gesagt der mehr weiss als ich.

1public class MyThread ...
2 ...
3 public void run(){
4 int i = 0;
5 while(i <= 20){
6 handler.post(new Runnable(){
7 public void run(){
8 Activity.tv.setText(Integer.toString(i);
9 }
10 });
11 }
12 }
13}

Aber wie gesagt bin ich mir nicht sicher ob man threads so verwenden darf, weil developer.android von dieser Variante abrät.
ich habs wie gesagt schon mit Runnable und AsyncTask versucht nur blieb da der Erfolg aus.

Daher bin ich auf der Suche nach einer Android-Lösung wenn man so will...

28.04.2012 12:12:24 via Website

Ja ne.....
das ich nen sleep einbaun muss um den vorgrang beobachten zu können ist völlig klar und war auch nicht mein problem.

ich hatte ein problem mit dem thread-aufruf weil es anscheinend (warum weiss ich leider ned) in android nicht üblich ist von der klasse thread zu erben und man am besten die runnable schnittstelle implementiert.

nur hat mein code mit der runnable nicht funktioniert. daher hab ich den code gepostet der funktioniert in der hoffnung das mir einer einen besseren weg erklären kann.

is anscheinend völlig in die hose gegangen :) aber macht nichts ich hab mein problem schon gelöst.

die einzige frage die noch offen bleibt ist warum man von thread nicht erben sollte? oder hab ich da was völlig falsch verstanden?

30.04.2012 09:06:04 via Website

Ok ich glaube dieser code hat bei mir nicht funktioniert weil ich .start() vergessen hatte ...

public void counter() { new Thread(new Runnable(){
public void run(){
int i = 0;
while (i <= 20) {
try { Thread.sleep(300); } catch ...
handler.post(new Runnable() {
public void run(){
tv.setText(Integer.toString(i));
}
});
i++;
}
}
}).start();
}

wenn man die Methode counter aufruft zählt ein Thread bis 20 und gibt die inkrementierung in einer TextView aus.