2017-01-07 45 views
0

我试图做一个启动计时器的按钮(仅限秒)。无论何时按下,定时器都会重置为0,并且每秒开始递增。这里我有一个处理程序,但它不会实时更新,只会在您单击按钮时更新。我错过了什么?处理程序不实时更新int

public class MainActivity extends Activity { 

    Handler mHandler = new Handler(); 
    int mSeconds; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     downloadedImg = (ImageView) findViewById(R.id.imageView); 
    } 

    Runnable UpdateRunnable = new Runnable() { 
     @Override 
     public void run() { 
      updateSec(); 
     } 
    }; 

    public void updateSec() { 
     mSeconds++; 
     mHandler.postDelayed(UpdateRunnable, 1000); 
    } 

    public void clickAsync(View view) { 

     new ImageDownloader().execute(downloadUrl); 
     Button button = (Button) view; 
     mSeconds = 0; 

     button.setText("Seconds since clicked: " + mSeconds); 
     //actively increment and update seconds on button every second 
     //set seconds to 0 on click 
     updateSec(); 
    } 
} 

回答

3

它只会在您点击按钮时更新。我错过了什么?

因为button.setText只有在点击了Button时才被调用。调用button.setTextrun()递增mSeconds前:

public void run() { 
     button.setText("Seconds since clicked: " + mSeconds); 
     updateSec(); 
    } 

和访问buttonclickAsync方法外声明它clickAsync方法。

0

你只是更新与setText()按钮上的文字在clickAsync()但不是在任何的调用时的处理程序可运行火灾的方法。

考虑移动

button.setText("Seconds since clicked: " + mSeconds); 

updateSec()