我正在开发一个应用程序,用于计算文本段落/页面中的单词数量。
扫描完成后,我希望在数字从0到TOTAL(No of Words)之后显示输出的总字数。
示例:So, for 100 words: 0..wait..1..wait..2..wait..3..wait..4..wait..5,6,7,8,9 10.......99,100 and then STOP
。
我尝试了几种不同的技术:
TextView sentScore = (TextView) findViewById(R.id.sentScore);
long freezeTime = SystemClock.uptimeMillis();
for (int i = 0; i < sent; i++) {
if ((SystemClock.uptimeMillis() - freezeTime) > 500) {
sentScore.setText(sent.toString());
}
}
我也尝试过这个:
for (int i = 0; i < sent; i++) {
// try {
Thread.sleep(500);
} catch (InterruptedException ie) {
sentScore.setText(i.toString());
}
}
但没有任何帮助我。我相信这些都是非常业余的尝试。
有任何帮助吗?谢谢
答案 0 :(得分:2)
以下代码将帮助您当前的差距为100毫秒,但您可以根据自己的方便进行更改
for (int i = 0; i < sent; i++) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
sentScore.setText(sent.toString());
}
}, 100 * i);
}
答案 1 :(得分:-1)
在android中你应该使用AsyncTask进行这种工作
http://developer.android.com/reference/android/os/AsyncTask.html
private class CountUpTask extends AsyncTask<Void, Void, Void> {
private TextView textview;
private int current, total, interval;
public CountUpTask(TextView textview, int total, int interval) {
this.textview = textview;
this.current = 0;
this.total = total;
this.interval = interval;
}
@Override
protected void doInBackground() {
while(this.current < this.total){
Thread.sleep(this.interval);
this.current++;
publishProgress(this.current);
}
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
this.textview.setText("0");
}
@Override
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
this.textview.setText(progress+"");
}
@Override
protected void onPostExecute() {
}
}
如您所见,doInBackground在后台线程中执行,onPrexcute,onProgressUpdate和onPostExecute在UI线程中执行,允许您更新UI。
CountUpTask countUpTask = new CountUpTask ((TextView) findViewById(R.id.sentScore), sent, 500);
countUpTask.execute();