A maioria dos exemplos de códigos em Android de contadores executam todo código na Activity principal.
Neste exemplo mostro uma abordagem de como fazer um contador utilizando TimerTask em uma Classe separada com métodos para controlar o estado de execução , deixando o código mais limpo.
Crie uma classe chamada ContadorTimerTask.java
Crie uma classe chamada ContadorTimerTask.java
private TextView txtView;
private Timer timer;
private MyTimerTask myTimerTask;
private Handler handler;
private int counter = 0;
private long delay = 1000; // Atraso inicial
private long interval = 1000; // Intervalo de execução
boolean running = false;
public ContadorTimertask(TextView txtView) {
this.txtView = txtView;
handler = new Handler();
}
public long getInterval() {
return interval;
}
public void setInterval(long interval) {
this.interval = interval;
this.delay = interval;
}
public boolean isRunning() {
return running;
}
public void start() {
if (running == false) {
running = true;
timer = new Timer();
timer.schedule(new MyTimerTask(), delay, interval);
} else {
Log.i("LOG", "ALREADY RUNNING");
}
}
public void stop() {
running = false;
if (timer != null) {
timer.cancel();
}
counter = 0;
txtView.setText("0");
}
public void pause() {
running = false;
if (timer != null) {
timer.cancel();
}
}
class MyTimerTask extends TimerTask {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
counter++;
txtView.setText("" + counter);
}
});
}
}
}
Como utilizar esta classe:
1) Cria uma instância da classe e passe o EditText no construtor
2) Configure o intervalo de execução
3) Utilize os métodos start(), stop(), pause()
Exemplo de como utilizar a Classe no MainActivity
2) Configure o intervalo de execução
3) Utilize os métodos start(), stop(), pause()
Exemplo de como utilizar a Classe no MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button startButton = (Button) findViewById(R.id.start_button);
final Button stopButton = (Button) findViewById(R.id.stop_button);
final TextView txtView = (TextView) findViewById(R.id.txtview);
// Crie uma nova instância da classe
final ContadorTimertask contador = new ContadorTimertask(txtView);
// Configure o intervalo de execução
contador.setInterval(1000); // Executa a cada 1 segundo
// Evento do clique do botão start
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!contador.isRunning()) {
contador.start(); // Inicia o contador
startButton.setText("PAUSAR");
} else {
contador.pause(); // Pausa o contador
startButton.setText("CONTINUAR");
}
}
});
// Evento de clique do botão stop
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
contador.stop(); // Para o contador (zera contagem)
startButton.setText("INICIAR");
}
});
}
}
Vídeo do exemplo: