2017-01-07 4 views
0

私はタイマーを開始するボタンを作成しようとしています(秒のみ)。押すたびに、タイマーは0にリセットされ、再び1秒ごとにインクリメントを開始します。ここではハンドラがありますが、リアルタイムでは更新されません。ボタンをクリックすると更新されます。私は何が欠けていますか?ハンドラがリアルタイムで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をクリックしたときにのみ呼び出されるためです。 mSecondsをインクリメントする前にrun()内部button.setTextを呼び出す:

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

clickAsync方法外buttonにアクセスするためにclickAsync方法の外にそれを宣言する。

0

あなただけのハンドラ実行可能な火災と呼ばれる方法のいずれかにおいてclickAsync()setText()ではなくて、ボタンのテキストを更新しています。

updateSec()内部

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

を移動することを検討してください。

関連する問題