睡觉前更新TextView

时间:2013-02-18 20:09:22

标签: android multithreading textview sleep

我想在setText()上进行TextView并让活动暂停。

以下是代码:

tv.setText("myText");
tv.invalidate(); // Doesn't work
pause(1000); // French for sleep

我的功能暂停:

public void pause(int seconds)
{
    synchronized(this)
    {
        try { 
            this.wait(seconds); 
        } catch (InterruptedException ie) { 
            ie.printStackTrace();
        }
    }
}

问题是TextView在睡眠前没有更新。我试图在TextView上调用invalidate(),但它不起作用。

我有另一种可能的解决方案:创建一个用于休眠活动的新线程,如果我的TextView的值仍然相同,则重新加载线程,否则调用我的函数pause()。但是有可能在View中获得TextView的真正价值吗?因为我可以在做的时候得到新的文字:

tv.setText("myText");
System.out.println(tv.getText());
pause(1000); // French for sleep

而文本不会在视图中更新。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我会建议Jave说的话。

tv.setText("myText");
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //Do something
            }
        }, 3000); //3000 is time in ms.

答案 1 :(得分:0)

如果您使用UI线程并使其休眠时间过长,您将获得应用程序无响应对话框。当然,只有当函数结束时,您才会看到新值,因此这不是一个好的解决方案。如果您只想使用UI线程,可以使用处理程序。

如果您使用不同的线程,则需要使用UI线程以某种方式设置TextView的文本,因为它是唯一允许这样做的(使用处理程序)。