countdowntimer不会在textview上打印

时间:2012-06-23 06:48:17

标签: android android-layout

我的应用程序是问题/答案应用程序,用户询问问题,然后服务器向用户发送问题,当用户收到问题时,会出现一个ShowQuestion按钮,当用户点击它时,我想启动计时器,因为用户必须在36秒内回答 我在我的xml中构建了一个像这样的

的textView
<TextView
        android:id="@+id/tvRemaingTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible" 
/>

在我的Java活动中我做了这个

TextView remaingTimer;
CountDownTimer timer;
private void initialize() {
remaingTimer=(TextView)findViewById(R.id.tvRemaingTime);
}

当用户点击ShowQuestion时,我就这样做

timer =new CountDownTimer(360000,100) {
   public void onTick(long millisUntilFinished) {
        remaingTimer.setText(millisUntilFinished+"");
   }
   public void onFinish() {
    remaingTimer.setText("finish");
   }
};
timer.start();

但它没有打印任何东西,我做错了什么?

我正在使用AsyncTask从服务器那里得到问题:

public class getQuestionFromServer extends
    AsyncTask<String, Integer, String[]> {}

但我不会对textView产生影响,因为ShowQuestion按钮不会出现,否则用户从服务器上得到了一个问题

1 个答案:

答案 0 :(得分:1)

您可以使用runOnUiThread从Thread更新TextView:

TextView remaingTimer;
CountDownTimer timer;
private boolean mClockRunning=false;
private int millisUntilFinished=36;
private void initialize() {
remaingTimer=(TextView)findViewById(R.id.tvRemaingTime);
}
 ShowQuestionbutn.setOnClickListener(new OnClickListener() {    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(mClockRunning==false)
                {
                    mClockRunning=true;
                    millisUntilFinished=0;
                    myThread();
                }
    public void myThread(){
            Thread th=new Thread(){

             @Override
             public void run(){
              try
              {

               while(mClockRunning)
               {
               Thread.sleep(100L);// set time here for refresh time in textview
               CountDownTimerActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                 // TODO Auto-generated method stub
                     if(mClockRunning)
                     {
                                                                                                       if(millisUntilFinished<0)
               {
               mClockRunning=false;
               millisUntilFinished=36;
                }
                else
                {
               millisUntilFinished--;
               remaingTimer.setText(millisUntilFinished+"");//update textview here
               }
                     }

            };
                       }
              }catch (InterruptedException e) {
            // TODO: handle exception
             }
             }
            };
            th.start();
           }