1

UIスレッドからのみtTxtViewsのテキストを変更できることは知っていますが、それを操作する方法が見つからないようです。

もう少し詳しく説明します。経過時間を表示する TextView を作成しようとしていますが、スレッドまたは呼び出され続けるメソッドでは実行できません。これを行う方法を手伝ってもらえますか?私はほとんどアイデアがありませんので。

ありがとう。

4

2 に答える 2

2

これを使って

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);
于 2012-12-15T23:54:09.000 に答える
2
        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);
}
于 2012-12-16T00:11:38.460 に答える