3

我想做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 在睡觉前没有更新。我试图调用invalidate()我的 TextView 但它不起作用。

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

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

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

任何想法 ?

4

2 回答 2

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.
于 2013-02-18T20:22:03.080 回答
0

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

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

于 2013-02-18T20:54:04.623 回答