在一段时间后设置Android按钮可见?

时间:2011-10-02 18:37:34

标签: java android button

我有一个按钮,我不想在可以运行一定时间之前点击(比如5秒?)我尝试创建这样的线程

    continueButtonThread =  new Thread()
    {
        @Override
        public void run()
        {
            try {
                synchronized(this){
                    wait(5000);
                }
            }
            catch(InterruptedException ex){                    
            }

            continueButton.setVisibility(0);                
        }
    };

    continueButtonThread.start();

但是我不能在不同的线程中修改按钮的setVisibility属性。这是LogCat的错误:

10-02 14:35:05.908:ERROR / AndroidRuntime(14400):android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。

还有其他方法来解决这个问题吗?

4 个答案:

答案 0 :(得分:6)

问题是您只能在UI线程中触摸活动视图。你可以使用runOnUiThread函数来完成它。我建议你使用

handler.postDelayed(runnable, 5000)`

答案 1 :(得分:3)

您必须从UI线程更新您的视图。你正在做的是你从非ui线程更新。

使用

contextrunOnUiThread(new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub

        }});

或在您认为正确的时间更新视图可见性时使用处理程序并发信号hand.sendMessage(msg)

 Handler hand = new Handler()        
        {

            @Override
            public void handleMessage(Message msg) {
                /// here change the visibility
                super.handleMessage(msg);
            }

        };

答案 2 :(得分:1)

您可以使用View课程中的postDelayed方法(A ButtonView的孩子)

答案 3 :(得分:0)

这里是我找到的简单答案

Button button = (Button)findViewBYId(R.id.button);
button .setVisibility(View.INVISIBLE);
button .postDelayed(new Runnable() {
    public void run() {
        button .setVisibility(View.VISIBLE);
    }
}, 7000);