在Android中每秒更新TextView

var*_*sha 1 android timer textview

我想每秒更新我的textview.按钮点击我正在调用一种方法,

loopMethod(milli); //suppose milli= 50000 i.e 50 sec.
Run Code Online (Sandbox Code Playgroud)

所以我loopMethod(int m)的如下:

public void loopMethod(int m){
    timer=(TextView) findViewById(R.id.timerText);
    if(m>=1000){
        try {
            timer.setText(""+m);//timer is a textview
            System.out.println(m);
            m=m-1000;
            Thread.sleep(1000);
        } catch(InterruptedException ex) {
            ex.printStackTrace();
        }
        loopMethod(m);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我期待的是,我的计时器textview应该打印m每秒的值.但我只得到控制台输出,即system.out.println(m)......控制台上的打印值工作正常...但它根本没有更新我的textview

Aji*_*ian 12

您可以使用以下代码:

Runnable updater;
void updateTime(final String timeString) {
    timer=(TextView) findViewById(R.id.timerText);
    final Handler timerHandler = new Handler();

    updater = new Runnable() {
        @Override
        public void run() {
            timer.setText(timeString);
            timerHandler.postDelayed(updater,1000);
        }
    };
    timerHandler.post(updater);
}
Run Code Online (Sandbox Code Playgroud)

在这一行:

 timerHandler.post(updater);
Run Code Online (Sandbox Code Playgroud)

时间将第一次设定.即,updater将执行.首次执行后,它将在每1秒的时间间隔后发布.它会每隔一秒更新一次TextView.

您需要在活动销毁时将其删除,否则会泄漏内存.

@Override
protected void onDestroy() {
   super.onDestroy();
   timerHandler.removeCallbacks(updater);
}
Run Code Online (Sandbox Code Playgroud)

希望它会对你有所帮助.