2017-11-22 1 views
0

Warum hört der Timer auf zu arbeiten, wenn ich die postDelayed(this,1000); innerhalb der if-Anweisung, knapp unter seconds++;? Im Layout befinden sich 3 Schaltflächen (Start, Stop, Reset). Drücken Sie Start-> Laufen = true, drücken Stop-> läuft = stoppen, drücken Reset-> läuft = false Sekunden = 0Warum Postdelayed funktioniert nicht in der if-Anweisung

private void runTimer() { 

    final TextView timeView = (TextView) findViewById(R.id.time_view); 
    final Handler handler = new Handler(); 

    handler.post(new Runnable() { 

     @Override 
     public void run() { 
      int hours = seconds/3600; 
      int minutes = (seconds % 3600)/60; 
      int secs = seconds % 60; 

      String time = String.format("%d:%2d:%02d", hours, minutes, secs); 
      timeView.setText(time); 
      if (running) { 
       seconds++; 
      //handler.postDelayed(this, 1000); 
      //doesnt work if i put it here 
      } 
      handler.postDelayed(this, 1000); 
     } 
    }); 

} 
+0

fügen Sie bitte Ihren Code hier hinzu. – ADyson

+0

Es erlaubt mir nicht, das zu tun .. es gibt Fehler Ich weiß nicht warum –

+0

Es ist definitiv möglich, Code zu Ihrer Frage hinzuzufügen. Fügen Sie nicht Ihren gesamten Code ein, sondern nur die Teile, die zur Reproduktion des Problems erforderlich sind. Es gibt Anleitungen in den SO-Hilfeseiten, wenn Sie Probleme mit dem Frageneditor haben. Wenn Sie erwähnen, was der Fehler auch war, können wir vielleicht helfen. – ADyson

Antwort

0

Zu der Zeit rufen Sie runTimer() die Variable running auf false gesetzt ist. Höchstwahrscheinlich müssen Sie den Anruf zu runTimer() in die Methode onClickStart() verschieben (nachdem Einstellung auf "true" gesetzt wurde).
Bei der Deklaration von Booleans wird der Standardwert mit false angenommen.

+0

Wenn ich postedeleed nur außerhalb der if-Anweisung, es funktioniert. Warum? –

+0

@AllicioBlack funktioniert wie erwartet, weil es außerhalb der Inhaftierung des 'false'' if-else Anweisungsblocks liegt. Das Problem Ihres Codes ist Ihre 'running' Variable, die immer falsch ist, ich kann sie nicht vollständig beantworten, da es nicht der gesamte Code ist. – Enzokie

+0

Im Layout befinden sich 3 Schaltflächen (Start, Stop, Reset). Drücken Sie Start-> running = true, drücken Sie stop-> running = stop, drücken Sie reset-> running = false seconds = 0 –

Verwandte Themen