开发者

Setting an Android Button visible after a certain period of time?

开发者 https://www.devze.com 2023-04-09 19:38 出处:网络
I have a button that I don\'t want to be clickable until a certain amount of time has run (say, 5 seconds?) I tried creating a thread like this

I have a button that I don't want to be clickable until a certain amount of time has run (say, 5 seconds?) I tried creating a thread like this

    continueButtonThread =  new Thread()
    {
        @Override
        public void run()
        {开发者_StackOverflow中文版
            try {
                synchronized(this){
                    wait(5000);
                }
            }
            catch(InterruptedException ex){                    
            }

            continueButton.setVisibility(0);                
        }
    };

    continueButtonThread.start();

But I can't modify the setVisibility property of the button within a different thread. This is the error from the LogCat:

10-02 14:35:05.908: ERROR/AndroidRuntime(14400): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Any other way to get around this?


The problem is that you can touch views of your activity only in UI thread. you can do it by using runOnUiThread function. I would like to suggest you to use

handler.postDelayed(runnable, 5000)`


You must update your view from UI-thread. What you are doing is you are updating from non-ui-thread.

Use

contextrunOnUiThread(new Runnable(){

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

        }});

or use handler and signalize hand.sendMessage(msg) when you think is right time to update the view visibility

 Handler hand = new Handler()        
        {

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

        };


You can use the postDelayed method from the View class (A Button is a child of View)


here is simple answer i found

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号