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

时间:2010-08-02 22:01:57

标签: android multithreading button view timer

我有一个应用程序,在程序开头显示免责声明。我希望按钮在一段时间内保持不可见,然后变得可见。 我设置了一个睡眠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);
      }

3 个答案:

答案 0 :(得分:55)

问题是,当您调用okButton.setVisibility(View.VISIBLE);时,您不在UI线程中,因为您创建并运行自己的线程。你需要做的是获取你的按钮的处理程序,并通过你通过处理程序获得的UI线程设置可见性。

所以而不是

okButton.setVisibility(View.VISIBLE)

你应该做

okButton.getHandler().post(new Runnable() {
    public void run() {
        okButton.setVisibility(View.VISIBLE);
    }
});

答案 1 :(得分:25)

我发现这是一个更简单的解决方案。延迟7秒的可见性

continuebutton.setVisibility(View.INVISIBLE);
continuebutton.postDelayed(new Runnable() {
        public void run() {
            continuebutton.setVisibility(View.VISIBLE);
        }
    }, 7000);

答案 2 :(得分:2)

我发现这是解决问题的更好方法 (button id = but_resend)

定义处理程序

  private Handler handler;

扩展类

中的调用函数
 showButtons();

在课后定义

private void showButtons() {
        handler = new Handler();

        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                ((Button) findViewById(R.id.but_resend)).setVisibility(View.VISIBLE);
            }
        }, 20000); // produce 20 sec delay in button visibility


    }

并记住通过

隐藏.xml文件中的可见性
android:visibility="invisible"