Андроид устанавливает видимость кнопки по таймеру
У меня есть приложение, которое показывает отказ от ответственности в начале программы. Я хочу, чтобы кнопка оставалась невидимой на определенное количество времени, а затем стала видимой.
Я настроил поток, который спит в течение 5 секунд, а затем пытается сделать кнопку видимой. Тем не менее, я получаю эту ошибку при выполнении моего кода:
08-02 21: 34: 07.868: ERROR/AndroidRuntime (1401): android.view.ViewRoot $CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может коснуться его представлений.
Как я могу считать 5 секунд, а затем сделать кнопку видимой?
БЛАГОДАРЯ.
Thread splashTread = new Thread() {
@Override
public void run() {
try {
int waited = 0;
while(_active && (!_ok2)) {
sleep(100);
if(_active) {
waited += 100;
if(waited >= _splashTime)
{
turnButtonOn();
}
}
}
} catch(InterruptedException e) {
// do nothing
} finally {
finish();
startActivity(new Intent("com.lba.mixer.Choose"));
}
};
splashTread.start();
public static void turnButtonOn() {
okButton.setVisibility(View.VISIBLE);
}
Ответы
Ответ 1
Проблема в том, что вы не находитесь в потоке пользовательского интерфейса при вызове okButton.setVisibility(View.VISIBLE);
, так как вы создаете и запускаете свой собственный поток. Что вам нужно сделать, это получить обработчик вашей кнопки и установить видимость через поток пользовательского интерфейса, который вы получаете через обработчик.
Итак, вместо
okButton.setVisibility(View.VISIBLE)
вы должны сделать
okButton.getHandler().post(new Runnable() {
public void run() {
okButton.setVisibility(View.VISIBLE);
}
});
Ответ 2
Я нашел это гораздо более простым решением. Видимость с задержкой 7 секунд
continuebutton.setVisibility(View.INVISIBLE);
continuebutton.postDelayed(new Runnable() {
public void run() {
continuebutton.setVisibility(View.VISIBLE);
}
}, 7000);