Saltar al contenido

¿Cómo hacer un temporizador de cuenta atrás en Android?

Al fin después de mucho trabajar ya dimos con la respuesta de este apuro que agunos lectores de nuestro sitio web han presentado. Si deseas aportar algo más no dudes en compartir tu comentario.

Solución:

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();

Consulte este enlace.

si usa el siguiente código (como se menciona en la respuesta aceptada),

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();

Dará como resultado una pérdida de memoria de la instancia de la actividad en la que usa este código, si no limpia cuidadosamente las referencias.

usa el siguiente código

//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();

Necesitas llamar cTtimer.cancel () siempre que el onDestroy () / onDestroyView () en la Actividad / Fragmento propietario se llama.

ingrese la descripción de la imagen aquí

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 = "2020-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

    

    

        
    

    

        

            

            
        

        

            

            
        

        

            

            
        

        

            

            
        
    

Aquí puedes ver las comentarios y valoraciones de los usuarios

Recuerda algo, que te brindamos la opción de esclarecer tu experiencia si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *