android设置计时器上按钮的可见性

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)