可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have two EditTexts in XML. In one EditText, the user can put a number as minutes and in another EditText, a number as seconds. After clicking the finish button, the seconds EditText should start to countdown and update its text every second.
Additionally, how can I keep it updating until it gets to zero minutes and zero seconds?
回答1:
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText(\"seconds remaining: \" + millisUntilFinished / 1000);
//here you can have your logic to set text to edittext
}
public void onFinish() {
mTextField.setText(\"done!\");
}
}.start();
Refer to this link.
回答2:
if you use the below code (as mentioned in accepted answer),
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText(\"seconds remaining: \" + millisUntilFinished / 1000);
//here you can have your logic to set text to edittext
}
public void onFinish() {
mTextField.setText(\"done!\");
}
}.start();
It will result in memory leak of the instance of the activity where you use this code, if you don\'t carefully clean up the references.
use the following code
//Declare timer
CountDownTimer cTimer = null;
//start timer function
void startTimer() {
cTimer = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
}
};
cTimer.start();
}
//cancel timer
void cancelTimer() {
if(cTimer!=null)
cTimer.cancel();
}
You need to call cTtimer.cancel() whenever the onDestroy()/onDestroyView() in the owning Activity/Fragment is called.
回答3:
MainActivity.java
package com.zeustechnocrats.countdown;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
private String EVENT_DATE_TIME = \"2018-12-31 10:30:00\";
private String DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";
private LinearLayout linear_layout_1, linear_layout_2;
private TextView tv_days, tv_hour, tv_minute, tv_second;
private Handler handler = new Handler();
private Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.count_down);
initUI();
countDownStart();
}
private void initUI() {
linear_layout_1 = findViewById(R.id.linear_layout_1);
linear_layout_2 = findViewById(R.id.linear_layout_2);
tv_days = findViewById(R.id.tv_days);
tv_hour = findViewById(R.id.tv_hour);
tv_minute = findViewById(R.id.tv_minute);
tv_second = findViewById(R.id.tv_second);
}
private void countDownStart() {
runnable = new Runnable() {
@Override
public void run() {
try {
handler.postDelayed(this, 1000);
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
Date event_date = dateFormat.parse(EVENT_DATE_TIME);
Date current_date = new Date();
if (!current_date.after(event_date)) {
long diff = event_date.getTime() - current_date.getTime();
long Days = diff / (24 * 60 * 60 * 1000);
long Hours = diff / (60 * 60 * 1000) % 24;
long Minutes = diff / (60 * 1000) % 60;
long Seconds = diff / 1000 % 60;
//
tv_days.setText(String.format(\"%02d\", Days));
tv_hour.setText(String.format(\"%02d\", Hours));
tv_minute.setText(String.format(\"%02d\", Minutes));
tv_second.setText(String.format(\"%02d\", Seconds));
} else {
linear_layout_1.setVisibility(View.VISIBLE);
linear_layout_2.setVisibility(View.GONE);
handler.removeCallbacks(runnable);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
handler.postDelayed(runnable, 0);
}
protected void onStop() {
super.onStop();
handler.removeCallbacks(runnable);
}
}
activity_main.xml
<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\"
android:background=\"@android:color/white\"
android:orientation=\"horizontal\">
<LinearLayout
android:id=\"@+id/linear_layout_1\"
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:background=\"@android:color/black\"
android:gravity=\"center_horizontal\"
android:visibility=\"gone\">
<TextView
android:id=\"@+id/tv_event\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_margin=\"20dp\"
android:text=\"Android Event Start\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"normal\" />
</LinearLayout>
<LinearLayout
android:id=\"@+id/linear_layout_2\"
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:background=\"@android:color/black\"
android:visibility=\"visible\">
<LinearLayout
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:layout_weight=\"1\"
android:orientation=\"vertical\">
<TextView
android:id=\"@+id/tv_days\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_gravity=\"center\"
android:text=\"00\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"bold\" />
<TextView
android:id=\"@+id/tv_days_title\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_gravity=\"center\"
android:text=\"Days\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"normal\" />
</LinearLayout>
<LinearLayout
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:layout_weight=\"1\"
android:orientation=\"vertical\">
<TextView
android:id=\"@+id/tv_hour\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_gravity=\"center\"
android:text=\"00\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"bold\" />
<TextView
android:id=\"@+id/tv_hour_title\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_gravity=\"center\"
android:text=\"Hour\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"normal\" />
</LinearLayout>
<LinearLayout
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:layout_weight=\"1\"
android:orientation=\"vertical\">
<TextView
android:id=\"@+id/tv_minute\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_gravity=\"center\"
android:text=\"00\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"bold\" />
<TextView
android:id=\"@+id/tv_minute_title\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_gravity=\"center\"
android:text=\"Minute\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"normal\" />
</LinearLayout>
<LinearLayout
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:layout_weight=\"1\"
android:orientation=\"vertical\">
<TextView
android:id=\"@+id/tv_second\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_gravity=\"center\"
android:text=\"00\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"bold\" />
<TextView
android:id=\"@+id/tv_second_title\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_gravity=\"center\"
android:text=\"Second\"
android:textColor=\"@android:color/white\"
android:textSize=\"20dp\"
android:textStyle=\"normal\" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
回答4:
just copy paste the following code........
MainActivity
package com.example.countdowntimer;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView text1;
private static final String FORMAT = \"%02d:%02d:%02d\";
int seconds , minutes;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text1=(TextView)findViewById(R.id.textView1);
new CountDownTimer(16069000, 1000) { // adjust the milli seconds here
public void onTick(long millisUntilFinished) {
text1.setText(\"\"+String.format(FORMAT,
TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(
TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished))));
}
public void onFinish() {
text1.setText(\"done!\");
}
}.start();
}
}
activity_main.xml
<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\"
android:orientation=\"vertical\" >
<TextView
android:id=\"@+id/textView1\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:layout_alignParentLeft=\"true\"
android:layout_alignParentTop=\"true\"
android:layout_marginLeft=\"34dp\"
android:layout_marginTop=\"58dp\"
android:text=\"Large Text\"
android:textAppearance=\"?android:attr/textAppearanceMedium\" />
</RelativeLayout>
回答5:
Just Call below function by passing seconds and textview object
public void reverseTimer(int Seconds,final TextView tv){
new CountDownTimer(Seconds* 1000+1000, 1000) {
public void onTick(long millisUntilFinished) {
int seconds = (int) (millisUntilFinished / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
tv.setText(\"TIME : \" + String.format(\"%02d\", minutes)
+ \":\" + String.format(\"%02d\", seconds));
}
public void onFinish() {
tv.setText(\"Completed\");
}
}.start();
}
回答6:
Revers CountDown timer with hours minutes and seconds
public void reverseTimer(int Seconds, final TextView tv) {
new CountDownTimer(Seconds * 1000 + 1000, 1000) {
public void onTick(long millisUntilFinished) {
int seconds = (int) (millisUntilFinished / 1000);
int hours = seconds / (60 * 60);
int tempMint = (seconds - (hours * 60 * 60));
int minutes = tempMint / 60;
seconds = tempMint - (minutes * 60);
tv.setText(\"TIME : \" + String.format(\"%02d\", hours)
+ \":\" + String.format(\"%02d\", minutes)
+ \":\" + String.format(\"%02d\", seconds));
}
public void onFinish() {
tv.setText(\"Completed\");
}
}.start();
}
回答7:
Using Kotlin:
var timer = object: CountDownTimer(30000, 1000) {
override fun onTick(millisUntilFinished: Long) {
tvTimer.setText(\"seconds remaining: \" + millisUntilFinished / 1000)
}
override fun onFinish() {
tvTimer.setText(\"done!\")
}
}
timer.start()
回答8:
Try this way:
private void startTimer() {
startTimer = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
long sec = (TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)));
Log.e(TAG, \"onTick: \"+sec );
tv_timer.setText(String.format(\"( %02d SEC )\", sec));
if(sec == 1)
{
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
tv_timer.setText(\"( 00 SEC )\");
}
}, 1000);
}
}
public void onFinish() {
tv_timer.setText(\"Timer finish\");
}
}.start();
}
回答9:
The Interface way.
import android.os.CountDownTimer;
/**
* Created by saikiran on 07-03-2016.
*/
public class CountDownTimerCustom extends CountDownTimer {
private TimeTickListener mTickListener;
private TimeFinishListener mFinishListener;
private long millisUntilFinished;
public CountDownTimerCustom(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
public void updateTickAndFinishListener(TimeTickListener tickListener) {
mTickListener = tickListener;
}
public void updateFinishListner(TimeFinishListener listener) {
mFinishListener = listener;
}
public long getCurrentMs() {
return millisUntilFinished;
}
public int getCurrentSec() {
return (int) millisUntilFinished / 1000;
}
@Override
public void onTick(long millisUntilFinished) {
this.millisUntilFinished = millisUntilFinished;
if (mTickListener != null)
mTickListener.onTick(millisUntilFinished);
}
@Override
public void onFinish() {
if (mTickListener != null)
mTickListener.onFinished();
mFinishListener.onFinished();
}
public interface TimeTickListener {
void onTick(long mMillisUntilFinished);
void onFinished();
}
public interface TimeFinishListener {
void onFinished();
}
}