मुझे नहीं पता कि आखिरी टिक क्यों काम नहीं कर रही है, लेकिन उदाहरण के लिए आप अपना खुद का टाइमर Runable बना सकते हैं।
class MyCountDownTimer {
private long millisInFuture;
private long countDownInterval;
public MyCountDownTimer(long pMillisInFuture, long pCountDownInterval) {
this.millisInFuture = pMillisInFuture;
this.countDownInterval = pCountDownInterval;
}
public void Start()
{
final Handler handler = new Handler();
Log.v("status", "starting");
final Runnable counter = new Runnable(){
public void run(){
if(millisInFuture <= 0) {
Log.v("status", "done");
} else {
long sec = millisInFuture/1000;
Log.v("status", Long.toString(sec) + " seconds remain");
millisInFuture -= countDownInterval;
handler.postDelayed(this, countDownInterval);
}
}
};
handler.postDelayed(counter, countDownInterval);
}
}
और इसे शुरू करने,
new MyCountDownTimer(10000, 2000).Start();
संपादित नासमझ है प्रश्न
के लिए आप एक चर काउंटर स्थिति (बुलियन) धारण करने के लिए होना चाहिए। तो आप स्टार्ट() जैसे स्टॉप() विधि लिख सकते हैं।
संपादित -2 के लिए नासमझ है प्रश्न
वास्तव में वहाँ काउंटर रोक पर कोई बग है लेकिन शुरुआत पर एक बग के बाद बंद (फिर से शुरू) फिर से नहीं है।
मैं एक नया अद्यतन पूर्ण कोड लिख रहा हूं जिसे मैंने अभी कोशिश की थी और यह काम कर रहा है। यह एक मूल काउंटर है जो स्क्रीन पर स्टार्ट और स्टॉप बटन के साथ समय दिखाता है।
काउंटर के लिए वर्ग
public class MyCountDownTimer {
private long millisInFuture;
private long countDownInterval;
private boolean status;
public MyCountDownTimer(long pMillisInFuture, long pCountDownInterval) {
this.millisInFuture = pMillisInFuture;
this.countDownInterval = pCountDownInterval;
status = false;
Initialize();
}
public void Stop() {
status = false;
}
public long getCurrentTime() {
return millisInFuture;
}
public void Start() {
status = true;
}
public void Initialize()
{
final Handler handler = new Handler();
Log.v("status", "starting");
final Runnable counter = new Runnable(){
public void run(){
long sec = millisInFuture/1000;
if(status) {
if(millisInFuture <= 0) {
Log.v("status", "done");
} else {
Log.v("status", Long.toString(sec) + " seconds remain");
millisInFuture -= countDownInterval;
handler.postDelayed(this, countDownInterval);
}
} else {
Log.v("status", Long.toString(sec) + " seconds remain and timer has stopped!");
handler.postDelayed(this, countDownInterval);
}
}
};
handler.postDelayed(counter, countDownInterval);
}
}
गतिविधि वर्ग
public class CounterActivity extends Activity {
/** Called when the activity is first created. */
TextView timeText;
Button startBut;
Button stopBut;
MyCountDownTimer mycounter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timeText = (TextView) findViewById(R.id.time);
startBut = (Button) findViewById(R.id.start);
stopBut = (Button) findViewById(R.id.stop);
mycounter = new MyCountDownTimer(20000, 1000);
RefreshTimer();
}
public void StartTimer(View v) {
Log.v("startbutton", "saymaya basladi");
mycounter.Start();
}
public void StopTimer(View v) {
Log.v("stopbutton", "durdu");
mycounter.Stop();
}
public void RefreshTimer()
{
final Handler handler = new Handler();
final Runnable counter = new Runnable(){
public void run(){
timeText.setText(Long.toString(mycounter.getCurrentTime()));
handler.postDelayed(this, 100);
}
};
handler.postDelayed(counter, 100);
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<TextView android:textAppearance="?android:attr/textAppearanceLarge"
android:text="TextView" android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/time">
</TextView>
<Button android:text="Start"
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="StartTimer">
</Button>
<Button android:text="Stop"
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="StopTimer">
</Button>
</LinearLayout>
मुझे लगा कि मुझे इसकी देखभाल करने के लिए केवल एक हैंडलर का उपयोग करना चाहिए, लेकिन मेरे प्रश्न में जिस दोष के बारे में बात कर रहा हूं, उससे कम, काउंटरडाउन टाइमर इतना आसान और सही है! मेरा मतलब सिर्फ आपके कोड उदाहरण और मेरा है, आप देख सकते हैं कि कितना सरल और कॉम्पैक्ट काउंटरडाउन टाइमर की तुलना हैंडलर से की जाती है! अगर केवल वास्तव में यह सही काम करता है हालांकि। – ProgrammingMakesMeQQ
बिल्कुल आप सही हैं, मैं बस यह दिखाना चाहता हूं कि आप इसे वैकल्पिक तरीकों से कर सकते हैं। – ocanal
@ocanal धन्यवाद मैं आपके कोड का उपयोग कर रहा हूं लेकिन अगर मैं टाइमर को कैसे रोकना चाहता हूं ... कृपया – Goofy