2012-09-14 16 views
5

Tengo una aplicación de prueba que tiene un temporizador para toda la actividad de juego donde deberías responder tantas preguntas como puedas dentro de los minutos asignados ..La actividad continúa después de finalizar();

después de que los minutos asignados hayan pasado, te llevará a la actividad de resultados que muestra tu puntaje Al presionar atrás, creé un cuadro de diálogo de alerta que le pregunta si desea volver al menú principal. Si se hace clic en sí, la página debe volver al menú principal y detener/matar la actividad del juego.

Sin embargo, cuando hago clic en "sí", volveré al menú principal, pero mientras esté en cualquier lugar de la aplicación, los resultados seguirán mostrando la actividad previa de juego que tuve. tal vez no hubiera terminado realmente la gameactivity, .. Aquí está el contador de tiempo y volver prensa fragmento de mi actividad:

new CountDownTimer(seconds, 1000) { 
    public void onTick(long millisUntilFinished) { 
      timer.setText("Seconds left: " + millisUntilFinished/1000); 
    } 
    public void onFinish() { 
      Intent intent = new Intent(GameActivityAddition.this, Score.class); 
      intent.putExtra("totalscore", score); 
      intent.putExtra("numberquestions", rowId); 
      intent.putExtra("d", difficulty); 
      db.close(); 
      startActivity(intent); 
    } 
}.start(); 

@Override 
public void onBackPressed() { 
    AlertDialog.Builder abuilder = new Builder(GameActivityAddition.this); 
    abuilder.setMessage("Return to Main Menu?"); 
    abuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      Intent main = new Intent(GameActivityAddition.this, Main.class); 
      startActivity(main); 
      finish();   
     } 
    }); 
    abuilder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel();    
     } 
    }); 
    AlertDialog alert = abuilder.create(); 
    alert.show(); 
} 
+1

Puede ser que los datos que ha configurado en la actividad de resultado no se borren cuando finaliza la actividad, lo que hace que vea datos más antiguos cuando vuelve a visitar la actividad. – Hiral

+0

No se detiene la cuenta atrás. – user996428

+0

Supongo, supongo, que el temporizador de cuenta regresiva funciona como un hilo, que sigue ejecutándose incluso cuando llamas a finish(). Intenta agregar una variable booleana en el temporizador para controlar su ejecución. – Huang

Respuesta

1

No hay ninguna garantía de que termine() cerrará inmediatamente su actividad actual (Es hasta androide.)


para resolver su problema de intentar esto,


Mantenga una referencia al temporizador (Usted va a utilizar esto para cancelar el temporizador cuando la licencia de usuario s la actividad actual),

CountDownTimer resultTimer = new CountDownTimer(seconds, 1000) { 
    public void onTick(long millisUntilFinished) { 
      timer.setText("Seconds left: " + millisUntilFinished/1000); 
    } 
    public void onFinish() { 
      Intent intent = new Intent(GameActivityAddition.this, Score.class); 
      intent.putExtra("totalscore", score); 
      intent.putExtra("numberquestions", rowId); 
      intent.putExtra("d", difficulty); 
      db.close(); 
      startActivity(intent); 
    } 
}.start(); 


y en onBackPressed() - cancelar el temporizador en setPositiveButton de devolución de llamada,


@Override 
public void onBackPressed() { 
    AlertDialog.Builder abuilder = new Builder(GameActivityAddition.this); 
    abuilder.setMessage("Return to Main Menu?"); 
    abuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      resultTimer.cancel(); //Stop the timer 
      resultTimer = null; 
      Intent main = new Intent(GameActivityAddition.this, Main.class); 
      startActivity(main); 
      finish();   
     } 
    }); 
    abuilder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel();    
     } 
    }); 
    AlertDialog alert = abuilder.create(); 
    alert.show(); 
} 
+1

_ "No hay garantía de que finish() cierre su actividad actual inmediatamente (depende de Android)." _ - Esto es incorrecto; cuando se invoca 'finish()', la actividad finaliza de inmediato. Lo que no se termina es el proceso en el que vivió la actividad. Por lo tanto, todos los datos estáticos que se establecieron durante la actividad permanecerán establecidos. –

+0

Malo, debería haber proporcionado información adicional.No hay garantía de que se invocará inmediatamente el Destrucción de la actividad (incluso si la Actividad se elimina completamente de la pantalla) y la memoria retenida no solo corresponde a los datos estáticos. – 66CLSjY

+0

@ 66CLSjY - Gracias por su respuesta detallada. definitivamente lo resolvió! :) – omi0301

0

Acabado una actividad padre de la actividad infantil se puede implementar iniciando la actividad secundaria usando startActivityForResult e implementando onActivityResult para procesar el resultado regreso por la actividad infantil. Ejemplo: desde ParentActivity, inicie ChildActivity para obtener un resultado usando startActivityForResult(). Luego, establezca un resultado que informe a ParentActivity para que finalice también. Finalización de llamada() en ChildActivity. Cuando ParentActivity recibe ese resultado de ChildActivity, ParentActivity también llama a finish() sobre sí mismo. Y ahí puedes comenzar otra actividad.

Por favor refiérase código: http://www.androidcompetencycenter.com/2009/03/tutorial-how-to-start-a-new-activity/

+0

He hecho exactamente lo mismo en mi aplicación, pero el problema es cuando presiono el botón Atrás en la actividad secundaria, la actividad está en pausa y el onResume() s de Parent Activity y sus fragmentos se llaman perfectamente. Sin embargo 1. La actividad requiere demasiado tiempo para terminar y parece que el teléfono está colgado. 2. Si la próxima vez que muestro un cuadro de diálogo no funcionará, porque la actividad del niño sigue siendo su pero no visible ... Ahora si giro la pantalla o voy a algún otro fragmento en Stop y onDestroy del niño se llama Activity y después de eso todo parece normal. – aProgrammer

1

La propiedad de CountDownTimer es, incluso finalizada la actividad que continúa la cuenta atrás. Si desea detener esto, ingrese countTimerVar.cancel() cuando finish() y pressBackButton.

Cuestiones relacionadas