2011-04-21 39 views
5

En mi aplicación Quiero mostrar un reloj temporizador de parada. Cuando busqué en Google encontré una opción llamada Chronometer en el sitio de desarrolladores. Se ve como un cronómetro de parada.cronómetro no se detiene en el androide

Cuando hago clic en el botón de inicio, quiero que comience el temporizador y cuando hago clic en el botón de pausa el temporizador debe pausarse cuando, una vez que hago clic en el inicio, debe comenzar desde el momento en que se detuvo.

Pero en este cronómetro se consigue de iniciar desde 0 y cuando hago clic en pausa al 1 min 10 seg se consiguen en pausa. Cuando hago clic una vez más, comienzo después de 5 minutos, el temporizador inicia el conteo desde 6 minutos a 10 segundos, incluso en pausa el temporizador se está ejecutando, cómo detenerlo y reanudarlo en el momento en que se detuvo.

que sigue es mi código para el cronómetro

Start = (Button)findViewById(R.id.widget306); 
     Start.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       chronometer.start();     
      } 
     }); 

     Stop = (Button)findViewById(R.id.widget307); 
     Stop.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
        chronometer.stop(); 
      } 
     }); 
    } 

Respuesta

1

Desde el cronómetro doc

no necesita contar hacia arriba. Esto no afecta a la base como conjunto de SETBASE (largo), sólo la visualización de la vista.

no tengo ningún entorno de desarrollo Android en este momento, por lo que no puede investigar en él más :(

Editar: es que la code que ha basado su código en Parece utilizar setBase a? la hora actual en parada

22

lo sentimos, pero he encontrado una solución a mí mismo y parece mucho más simple:

  1. En su actividad, declare una variable miembro (p. Ej.lastPause) para registrar el tiempo de su última pausa:

    private long lastPause;

  2. Comience el temporizador (suponiendo que la variable de su contador de tiempo es el crono):

    crono.setBase(SystemClock.elapsedRealtime());

    crono.start();

  3. Haga una pausa en su temporizador cada vez que use:

    lastPause = SystemClock.elapsedRealtime();

    crono.stop();

  4. y vuelva a su contador de tiempo cada vez usando:

    crono.setBase(crono.getBase() + SystemClock.elapsedRealtime() - lastPause);

    crono.start();

no hemos probado la precisión precisamente aún, ya que parece ser bien por mis ojos:]

+0

Funcionó perfectamente para mí ... ¡Gracias! – Mausam

+0

funciona para mí también! – Dan

0

Las siguientes obras se pregunta:

final long lastPause = SystemClock.elapsedRealtime(); 
mChronometer.stop(); 

final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mActivity) 
    .setCancelable(false) 
    .setMessage("Stop chronometer while AlertDialog is asking something.") 
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      dialog.cancel(); 
      mChronometer.setBase(mChronometer.getBase() 
       + SystemClock.elapsedRealtime() 
       - lastPause); 
      mChronometer.start(); 
     } 
    }); 
alertDialogBuilder.create().show(); 

Este fragmento se trata sólo de detener el cronómetro y mostrando una AlertDialog. Cuando el Diálogo está cerrado, el cronómetro comenzará desde su última posición.

Cuestiones relacionadas