0

我的应用程序是问答应用程序,用户提出问题,然后服务器向用户发送问题,当用户收到问题时,会出现一个 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 按钮不会出现,否则用户会从服务器收到问题

4

1 回答 1

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();
           }
于 2012-06-23T07:31:17.513 回答