Как показать вид за 3 секунды, а затем скрыть его? - PullRequest
16 голосов
/ 14 июля 2010

Я пытался с потоками, но android выдает «CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может касаться его представлений».

Так как я могу подождать 3 секунды, а затем скрыть вид, позволяя графическому интерфейсу реагировать?

-

Таймер также использует другой поток, поэтому он не решит ..

Ответы [ 3 ]

53 голосов
/ 30 сентября 2011

Есть более простой способ сделать это: использовать View.postDelayed (runnable, delay)

View view = yourView;
view.postDelayed(new Runnable() {
        public void run() {
            view.setVisibility(View.GONE);
        }
    }, 3000);

Это не очень точно: может быть скрыто через 3,5 или 3,2 секунды, потому что оно отправляет сообщения в очередь сообщений пользовательского интерфейса.

Используйте post () или runOnUiThread () просто как setTimeout ().

17 голосов
/ 25 мая 2015

Без необходимости иметь ссылку на представление или спящий поток:

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            // do stuff
        }
    }, 3000);
17 голосов
/ 14 июля 2010

Создает отдельный поток, который спит в течение 3 секунд, затем вызывает runOnUiThread, чтобы скрыть вид.

    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // Do some stuff
                }
            });
        }
    };
    thread.start(); //start the thread
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...