Android Update TextView in Thread und Runnable
Ich möchte in Android einen einfachen Timer erstellen, der jede Sekunde eine TextView aktualisiert. Es zählt einfach Sekunden wie in Minesweeper.
Das Problem ist, wenn ich die tvTime.setText (...) ignoriere (mache es //tvTime.setText (...), in LogCat wird jede Sekunde die folgende Nummer gedruckt. Aber wenn ich diese Nummer auf a setzen möchte TextView (erstellt in einem anderen Thread), das Programm stürzt ab.
Hat jemand eine Idee, wie man das einfach löst?
Hier ist der Code (Methode wird beim Start aufgerufen):
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();
}
BEARBEITEN:
Endlich hab ich es. Hier ist die Lösung für diejenigen, die interessiert sind.
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();
}