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

Tom*_*ito 20 user-interface android

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

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

-

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

use*_*973 59

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

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

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

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

  • 我想它应该是postDelayed而不是post (4认同)

Bra*_*rke 18

产生一个单独的线程,休眠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
Run Code Online (Sandbox Code Playgroud)

  • 一个`Message`和一个`Handler`将是一种更多的Android-y方式来做同样的事情,特别是在UI操作方面. (3认同)

mbo*_*nin 18

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

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


Gud*_*din 5

我知道这是一个延伸,但是如果您碰巧使用协程,这里有一个答案:

    lifecycleScope.launch {
        delay(3000)
        header.visibility = View.GONE
    }
Run Code Online (Sandbox Code Playgroud)