Настройка кнопки Android отображается через определенный промежуток времени? - PullRequest
1 голос
/ 02 октября 2011

У меня есть кнопка, которую я не хочу нажимать, пока не истечет определенное время (скажем, 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: ОШИБКА / AndroidRuntime (14400): android.view.ViewRoot $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представления, может касаться его представлений.

Есть ли другой способ обойти это?

Ответы [ 4 ]

6 голосов
/ 02 октября 2011

Проблема в том, что вы можете касаться видов своей деятельности только в потоке пользовательского интерфейса. Вы можете сделать это с помощью функции runOnUiThread. Я хотел бы предложить вам использовать

handler.postDelayed(runnable, 5000)`
3 голосов
/ 02 октября 2011

Вы должны обновить свой вид из UI-потока.То, что вы делаете, вы обновляете из не-ui-thread.

Используйте

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);
            }

        };
1 голос
/ 02 октября 2011

Вы можете использовать метод postDelayed из класса View (A Button является потомком View)

0 голосов
/ 12 августа 2016

вот простой ответ, который я нашел

Button button = (Button)findViewBYId(R.id.button);
button .setVisibility(View.INVISIBLE);
button .postDelayed(new Runnable() {
    public void run() {
        button .setVisibility(View.VISIBLE);
    }
}, 7000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...