如何显示3秒的视图,然后隐藏它?

时间:2010-07-14 15:10:41

标签: android user-interface

我尝试使用线程,但android抛出“CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。”。

那么我怎么能等待3秒然后隐藏视图,让GUI响应?

-

Timer也使用另一个线程,所以它不会解决..

5 个答案:

答案 0 :(得分:51)

有一种更简单的方法:使用View.postDelayed(runnable, delay)

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

它不是很精确:可能会隐藏在3.5或3.2秒内,因为它会发布到ui线程的消息队列中。

使用post()或runOnUiThread()就像setTimeout()一样。

答案 1 :(得分:17)

生成一个休眠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

答案 2 :(得分:17)

无需引用视图或睡眠线程:

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            // do stuff
        }
    }, 3000);

答案 3 :(得分:0)

我知道这很麻烦,但是如果您恰巧使用了协程,这是一个答案:

    lifecycleScope.launch {
        delay(3000)
        header.visibility = View.GONE
    }

答案 4 :(得分:0)

您可以显示您的视图,然后以这种方式隐藏它。

View view = yourView;
view.setVisibility(View.VISIBLE);
new Handler().postDelayed(() ->  view.setVisibility(View.GONE), 3000);