2017-06-05 65 views
0
public class Stopper implements Runnable { 

    private long mStartTime; 
    private volatile int since; 
    private Handler handler; 
    private TextView tv; 
    private Activity activity; 
    private Context context; 


    /* 
    * Constants 
    * */ 
     public static final int MILISEC_TO_MINUTE = 60000; 
     public static final int MILISEC_TO_HOUR = 3600000; 

    /* 
    * Flags 
    * */ 
     private boolean mIsRunning; 

     public Stopper(){ 
      //this.context = context; 
      activity = (Activity)context; 
      Message message = Message.obtain(); 
      handler = new Handler(Looper.getMainLooper()); 

     } 
     public void start(){ 
      mStartTime = System.currentTimeMillis(); 
      mIsRunning = true; 


     } 
     public void stop(){ 
      mIsRunning = false; 
     } 

     @Override 
     public void run() { 
      while (mIsRunning) { 
         since = (int)(System.currentTimeMillis() - mStartTime); 
         int hours = (since/MILISEC_TO_HOUR) % 24; // ms -> h; 360 000= 1[h] 
         int minutes = (since/MILISEC_TO_MINUTE) % 60;// ms -> min; 60 000[ms] = 1[min] 
         int seconds = (since/1000) % 60; // ms -> s ;1 000[ms] = 1[s] -> (1000 [ms] /1000)%60 = 1[s] 
         int ms = since % 1000; 


       tv.setText(String.format("%02d:%02d:%02d:%03d", hours, minutes, seconds, ms)); 


       //((Activity) context).updateTimerText(String.format("%02d:%02d:%02d:%03d", hours, minutes, seconds, ms)); 
      } 
     } 
    public void getStooperTextView(TextView textView) 
    { 
     this.tv = textView; 
    } 

    public int getSince() { 
     return since; 
    } 
} 

我看了一些關於chronometer的教程。它工作正常,直到我開始需要在兩個不同的活動中使用計時器。下面的代碼行需要返回值。如何從使用runnable接口的類更新UI上的TextView?

((Activity) context).updateTimerText(String.format("%02d:%02d:%02d:%03d", hours, minutes, seconds, ms)); 

所以,我嘗試使用Handler類,但要做到這一點,我需要一個Runnable對象。

回答

1

我相信方法Activity#runOnUiThread是你所需要的

+0

我可以使用'runOnUiThread'內'Activity'。我使用'runOnUiThread',但我不知道如何在這種情況下有兩種不同的情況下將值返回給'Activity'。 – detector

+0

你在這裏需要什麼?你是否試圖在兩個不同的活動之間重複使用相同的文本視圖?因爲這是錯誤的。或者你需要將上一次的時間設置爲下一次嗎? –

+0

我嘗試在兩個不同的活動('Activity','Activity2')中顯示塞子。這個類給我提供了關於我想在TextView中放置的時間的信息。問題出現在最後一行代碼'(Activity)上下文).updateTimerText'中。首先我需要信息,如果活動有方法'updateTimerText',所以我不僅可以爲兩個不同的Activity創建變量來返回它。 – detector