UIスレッドからのみtTxtViewsのテキストを変更できることは知っていますが、それを操作する方法が見つからないようです。
もう少し詳しく説明します。経過時間を表示する TextView を作成しようとしていますが、スレッドまたは呼び出され続けるメソッドでは実行できません。これを行う方法を手伝ってもらえますか?私はほとんどアイデアがありませんので。
ありがとう。
UIスレッドからのみtTxtViewsのテキストを変更できることは知っていますが、それを操作する方法が見つからないようです。
もう少し詳しく説明します。経過時間を表示する TextView を作成しようとしていますが、スレッドまたは呼び出され続けるメソッドでは実行できません。これを行う方法を手伝ってもらえますか?私はほとんどアイデアがありませんので。
ありがとう。
これを使って
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// Do what you want.
}
});
}
}).start();
または次を使用しますHandler
。
Runnable r = new Runnable() {
@Override
public void run() {
// Do what you want.
}
};
Handler mHandler = new Handler();
mHandler.post(r);
public class MainActivity extends Activity {
protected static final long TIMER_DELAY = 100;
private TextView tv;
protected Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.helloWorld);
handler = new Handler();
handler.post(timerTask);
}
private Runnable timerTask = new Runnable() {
public void run() {
Calendar now = Calendar.getInstance();
//format date time
tv.setText(String.format("%02d:%02d:%02d", now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND)));
//run again with delay
handler.postDelayed(timerTask, TIMER_DELAY);
}
};
}
追記忘れてました、すいません。これを忘れないでください:
@Override
public void onPause() {
if (handler != null)
handler.removeCallbacks(timerTask);
super.onPause();
}
そして、アプリを再開したい場合は、これを試してください
@Override
public void onResume() {
super.onResume();
if (handler != null)
handler.post(timerTask);
}