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對象。
我可以使用'runOnUiThread'內'Activity'。我使用'runOnUiThread',但我不知道如何在這種情況下有兩種不同的情況下將值返回給'Activity'。 – detector
你在這裏需要什麼?你是否試圖在兩個不同的活動之間重複使用相同的文本視圖?因爲這是錯誤的。或者你需要將上一次的時間設置爲下一次嗎? –
我嘗試在兩個不同的活動('Activity','Activity2')中顯示塞子。這個類給我提供了關於我想在TextView中放置的時間的信息。問題出現在最後一行代碼'(Activity)上下文).updateTimerText'中。首先我需要信息,如果活動有方法'updateTimerText',所以我不僅可以爲兩個不同的Activity創建變量來返回它。 – detector