Android中textView的计数效果

时间:2015-05-11 10:02:00

标签: android count textview

我正在开发一个应用程序,用于计算文本段落/页面中的单词数量。

扫描完成后,我希望在数字从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()); 
        } 
    }

但没有任何帮助我。我相信这些都是非常业余的尝试。

有任何帮助吗?谢谢

2 个答案:

答案 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();