1
resposta

TextView Não atualiza

Depois de fazer o curso eu tentei começar a fazer um APP meu para criar um placar de basquete. Ainda estou preso no cronometro. Criei uma classe Temporizador, que deveria armazenar o tempo em millissegundos e converter para o formato MM:SS

Problema é justamente esse, eu não consigo fazer com que o textview exiba o tempo rodando.

Segue a classe Temporizador:

//imports

public class Temporizador {

    // Duração padrao do temporizador em millis
    private long duracaoDoTemporizador = 10000;
    //Tempo restante da partida em millis
    private long tempoAteAcabar;
    private String tempoAteAcabarFormatado;

    //Armazena o tempo restante da partida em millis
    private CountDownTimer temporizador;
    //Define se temporizador está rodando
    private boolean temporizadorRodando = false;

    //Armazena tempo da partida em Minutos e Segundos
    private TextView tempoPartida;

    //Inicia a contagem. Tempo é calculado em millisegungos 1 seg = 1000; 1 minuto = 60000



    public void startTimer() {

        temporizador = new CountDownTimer(duracaoDoTemporizador, 1000) {
            //Ação a cada milli;
            @Override
            public void onTick(long millisUntilEnd) {
                tempoAteAcabar = millisUntilEnd;
                updateCountDownText();
            }
            //Quando tempo chega a zero
            @Override
            public void onFinish() {
                temporizadorRodando = false;
                tempoAteAcabar = duracaoDoTemporizador;
                //TODO: Play sound
                //TODO: +1 quarter
            }
        }.start(); //Inicia contagem
        temporizadorRodando = true;
        // pauseStartButton.setImageBitmap(); TODO: Change image to stop button
    }

    public void pauseTimer() {
        temporizador.cancel();
        temporizadorRodando = false;
        // pauseStartButton.setImageBitmap(); TODO: Change image to play button

    }

    public void resetTimer(){
        tempoAteAcabar = duracaoDoTemporizador;
        updateCountDownText();

    }

      private String updateCountDownText() {
          int minutes = (int) (tempoAteAcabar / 1000) / 60;
          int seconds = (int) (tempoAteAcabar / 1000) % 60;

          String tempoAteAcabarFormatado = String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
          return tempoAteAcabarFormatado;

    }

    public boolean isTemporizadorRodando(){
        return temporizadorRodando;
    }

    public void setTempoPartida(TextView tempoPartida) {
        tempoPartida.setText(updateCountDownText());
        this.tempoPartida = tempoPartida;
    }

    public TextView getTempoPartida() {
        return tempoPartida;
    }
}

E logo abaixo a classe Main, onde eu chamo o Temporizador. Uso a variavel matchTime para armazenar o text view. Devo mencionar que a varial matchTime nem ficou roxinha no IDE.

//imports

public class MainActivity extends AppCompatActivity {


    private TextView matchTime;
    private ImageButton pauseStartButton;
    private ImageButton resetButton;

    private Temporizador tempoPartida;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        matchTime = findViewById(R.id.match_Time);
        pauseStartButton = findViewById(R.id.pause_start_button);
        resetButton = findViewById(R.id.reset_button);


        tempoPartida = new Temporizador();

        matchTime = tempoPartida.getTempoPartida();

        pauseStartButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v){
                if (tempoPartida.isTemporizadorRodando()){
                    tempoPartida.pauseTimer();
                } else {
                    tempoPartida.startTimer();
                }
            }
        });

        resetButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tempoPartida.resetTimer();
            }
        });


    }






}
1 resposta

José Eduardo,

Se você colocasse o projeto no GitHub ficava mais fácil para quem quer ajudar poder testar.

Olhando só o código eu acredito que pode resolver se no onTick você chamar setTempoPartida em vez de updateCountDownText.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software