Подтвердить что ты не робот

Андроид устанавливает видимость кнопки по таймеру

У меня есть приложение, которое показывает отказ от ответственности в начале программы. Я хочу, чтобы кнопка оставалась невидимой на определенное количество времени, а затем стала видимой. Я настроил поток, который спит в течение 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);
      }
4b9b3361

Ответ 1

Проблема в том, что вы не находитесь в потоке пользовательского интерфейса при вызове okButton.setVisibility(View.VISIBLE);, так как вы создаете и запускаете свой собственный поток. Что вам нужно сделать, это получить обработчик вашей кнопки и установить видимость через поток пользовательского интерфейса, который вы получаете через обработчик.

Итак, вместо

okButton.setVisibility(View.VISIBLE)

вы должны сделать

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

Ответ 2

Я нашел это гораздо более простым решением. Видимость с задержкой 7 секунд

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