如何使用线程更新textview?

时间:2011-05-24 10:48:18

标签: java android

我试图在3秒后更新textview,我想在我使用线程的循环中做到这一点.....我该怎么办才能启动后台线程以便3秒后完成background1线程启动...它应该在循环中完成?

     package com.edu.math;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.widget.TextView;

    public class EduMath extends Activity {
        TextView txt;
        TextView tv;
        TextView num;
        String x;
        int time = 3000;
        float z ;


    int random;
            int random1;
            int random_operator =1;

    /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            txt=(TextView)findViewById(R.id.txt);
            tv = (TextView)findViewById(R.id.randomNumber);

            background.start();
        }

        // our handler
        Handler handler = new Handler() {
        public void handleMessage(Message msg) {//display each item in a single line

            random = (int)Math.ceil(Math.random()*10);
            random1 = (int)Math.ceil(Math.random()*10);

            if(random1>random)
            {
                txt.setText(/*txt.getText()+*/""+random1+" "+>+" "+random+" "+
System.getProperty("line.separator"));
            }
            else
            {
                txt.setText(/*txt.getText()+*/""+random+" "+>+" "+random1+
System.getProperty("line.separator"));
            }
        }
    };

    Handler handler1 = new Handler() {
        @Override
        public void handleMessage(Message msg) {//display each item in a single line


                txt.setText(/*txt.getText()+*/""+random1+" "+x+" "+random+System.getProperty("line.separator"));

        }
    };
    Thread background1 =new Thread(new Runnable() {

        @Override
        public void run() {

            for(int i=0;i<10;i++)
            {
                try {

                    Thread.sleep(time);
                    // send message to the handler with the current message handler          

                    handler1.sendMessage(handler1.obtainMessage());
                    background.stop();
                    Log.d("EduMath-enclosing_method", "thread started");
                } catch (Exception e) {
                    Log.v("Error", e.toString());
                }
            }

        }
    });


    Thread background=new Thread(new Runnable() {

        @Override
        public void run() {
            for(int i=0;i<10;i++)
            {
                try {
                    Thread.sleep(time);

        // send message to the handler with the current message handler          
                    handler.sendMessage(handler.obtainMessage());
                                        background1.start();
                } catch (Exception e) {
                    Log.v("Error", e.toString());
                }
            }
             }
    });
}

4 个答案:

答案 0 :(得分:1)

你必须使用AsyncTask来改变布局中的任何视图,但是现在我对AsyncTask的经验很少。

答案 1 :(得分:0)

答案 2 :(得分:0)

public class HandlerDemo extends Activity {

ProgressBar bar;

Handler handler=new Handler() {
@Override
public void handleMessage(Message msg) {
    //add your text
}
};

AtomicBoolean isRunning=new AtomicBoolean(false);


public void onStart() {
   super.onStart();

   Thread background=new Thread(new Runnable() {
   public void run() {
    try {

           Thread.sleep(3000);
           handler.sendMessage(handler.obtainMessage());

}
catch (Throwable t) {
// just end the background thread
}
}
});
isRunning.set(true);
background.start();
}
public void onStop() {
super.onStop();
isRunning.set(false);
}
}

答案 3 :(得分:0)

在这篇文章中尝试解决方案...似乎是您正在寻找的http://androidgenuine.com/?p=707