TextView aktualisieren

  • Antworten:7
Buckwild
  • Forum-Beiträge: 15

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

Antworten
Buckwild
  • Forum-Beiträge: 15

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...

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

27.04.2012, 14:38:06 via Website

Was willst du denn letztendlich erreichen?

Dein jetziger Code wird dir wahrscheinlich (scheinbar) einfach die 20 im TextView anzeigen.

Lg Ansgar

Antworten
Aeefire
  • Forum-Beiträge: 172

27.04.2012, 18:49:52 via Website

du müsstest eine Art Pause einbauen... es gibt doch sowas wie thread.sleep oder nicht?

http://developer.android.com/reference/java/lang/Thread.html#sleep(long, int)

da ists auch schon :)

damit kannst du zwischen den inkrementierungen pausen einbauen, sonst geht es einfach zu schnell und du siehst nur die 20... wär auch arg wenn das nicht so schnell gehen würde xD

Antworten
Buckwild
  • Forum-Beiträge: 15

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?

Antworten
Aeefire
  • Forum-Beiträge: 172

28.04.2012, 12:57:25 via Website

Na wenn du es eh besser weißt, teil uns doch deine Lösung mit.

Antworten
Buckwild
  • Forum-Beiträge: 15

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.

Antworten