ste*_*eve 13 multithreading android view timer button
我有一个应用程序,在程序开始时显示免责声明.我希望按钮在一段时间内保持不可见,然后变得可见.我设置了一个睡眠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);
}
Run Code Online (Sandbox Code Playgroud)
And*_*ang 55
问题是,当您调用时,您不在UI线程中okButton.setVisibility(View.VISIBLE);,因为您创建并运行自己的线程.您需要做的是获取按钮的处理程序,并通过处理程序获得的UI线程设置可见性.
而不是
okButton.setVisibility(View.VISIBLE)
Run Code Online (Sandbox Code Playgroud)
你应该做
okButton.getHandler().post(new Runnable() {
public void run() {
okButton.setVisibility(View.VISIBLE);
}
});
Run Code Online (Sandbox Code Playgroud)
小智 26
我发现这是一个更简单的解决方案.7秒延迟的可见性
continuebutton.setVisibility(View.INVISIBLE);
continuebutton.postDelayed(new Runnable() {
public void run() {
continuebutton.setVisibility(View.VISIBLE);
}
}, 7000);
Run Code Online (Sandbox Code Playgroud)