从线程更改TextView文本

时间:2012-12-15 23:31:44

标签: android multithreading textview

我知道你只能从UI线程更改tTxtViews中的文本,但我似乎无法找到一种方法来处理它。

我将进一步了解更多细节:我正在尝试使用TextView显示传递的时间,但我不能在一个线程中执行它,或者一个不断调用的方法。 你能用这种方式帮助我吗?因为我几乎没有想法。

感谢。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
}