Нужно, что бы автоматически вывелся текст в TextView, а по прошествию паузы он изменился.
У меня так:
...
tv.setText("1");
SystemClock.sleep(2000);
tv.setText("2");
...
Но результат только такой: Пауза и выведение tv.setText("2");, а вот
tv.setText("1"); - нет вообще. Менял виды
пауз, виды действий до и после неё, виды методов (по клику, по
перенаправлению ...), но увы, он будто игнорирует первое действие. Вероятно
это связано только с виджетами.
Используйте Handler.
...
tv.setText("1");
runWithDelay();
...
private void runWithDelay() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
tv.setText("2");
}
}, 2000);
}
SystemClock.sleep() не рекомендуется использовать в основном потоке.
Как вариант использовать:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// что-то
}
}, 2000);
или
new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// тик
}
@Override
public void onFinish() {
// на финише
}
}.start();
Не надо усыплять главный поток - он из-за этого и не может обновить текст.
Можно сделать через Handler или так (у каждой View есть свой) :
tv.setText("1");
tv.postDelayed(() -> tv.setText("2"), 2000);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости