Обновление Android TextView в Thread и Runnable
Я хочу сделать простой таймер в Android, который обновляет TextView каждую секунду. Он просто считает секунды, как в Сапер.
Проблема в том, что когда я игнорирую tvTime.setText (...) (сделайте его //tvTime.setText (...), в LogCat будет печататься следующий номер каждую секунду. Но когда я хочу установить этот номер для TextView (созданного в другом потоке), программа вылетает.
У кого-нибудь есть идеи, как это легко решить?
Вот код (метод вызывается при запуске):
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();
}
РЕДАКТИРОВАТЬ:
Наконец то я понял. Вот решение для тех, кто интересуется.
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();
}