如何创建一个每1秒生成一个随机单词的Android应用程序? 这是我的代码:
new Timer().scheduleAtFixedRate(new TimerTask(){
public void run()
{
started = true;
word = "";
for (int i = 0; i < lenght+1; i++)
{
int j = rand.nextInt((max-min) + 1) + min;
word += tr.Translate(j);
}
txt.setText(word);
}
}, 0, 5000);
似乎我的应用程序每次都必须更改TextView(“txt”)的文本时停止;我怎样才能做到这一点?
答案 0 :(得分:0)
毫无疑问,在Thread
内运行。这样做,它将在后台生成单词,一旦它已经有,主UI线程必须只是将内容附加到txt
实例。
new Thread(
new Runnable() {
public void run() {
// your stuff
}
}
).start()
要将结果分配给txt
对象,您可能无法在此线程中执行此操作。为此,您需要在Handler
中声明Activity
并在线程中使用该处理程序,因此它使用sendMessage()
到主Activity,而Activity只是设置文本。
----编辑----
正如@FD_所说,还有另一种方法可以在不使用Handler
的情况下进行更新。您只需要调用runOnUiThread()
方法,如下所示:
runOnUiThread(new Runnable() {
public void run() {
txt.setText(your_new_text);
}
});
另一种方法是使用AsyncTask
,这是(模糊地说)一个线程的“演变”,它为你提供了很多东西。更多关于AsyncTask
s here。
----编辑----
这将是以下方式之一:
new Thread(
new Runnable() {
public void run() {
new Timer().scheduleAtFixedRate(new TimerTask() {
public void run() {
started = true;
word = "";
for (int i = 0; i < lenght+1; i++)
{
int j = rand.nextInt((max-min) + 1) + min;
word += tr.Translate(j);
}
// This will update your txt instance without the need of a Handler
runOnUiThread(new Runnable() {
public void run() {
txt.setText(word);
}
});
}
}, 0, 5000);
}
}).start();
答案 1 :(得分:0)
试试这个:
int i = 0;
public void changeString() {
started = true;
word = "";
int j = rand.nextInt((max - min) + 1) + min;
word += tr.Translate(j);
txt.setText(word);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (i < lenght + 1) {
changeString();
i++;
}
}
}, 1000);
}
您也可以使用计时器
来完成此操作int i=0;
new Timer().scheduleAtFixedRate(new TimerTask(){
public void run()
{
started = true;
word = "";
int j = rand.nextInt((max-min) + 1) + min;
word += tr.Translate(j);
txt.setText(word);
i++
}
}, 0, 5000);
尝试以上方法。你犯的错误是在运行中使用for循环而不是使用循环运行方法it-self。