2012-09-14 15 views
5

Ho un'applicazione per il quiz che ha un timer per tutta la gameactivity in cui dovresti rispondere a quante più domande puoi entro i minuti assegnati ..L'attività continua ancora dopo la fine();

dopo che i minuti assegnati sono terminati, ti porterà all'attività dei risultati che mostra il tuo punteggio. Premendo indietro, ho creato una finestra di avviso che chiede se vuoi tornare al menu principale. Se si fa clic su Sì, la pagina dovrebbe tornare al menu principale e interrompere/uccidere la gameactivity.

Tuttavia, quando faccio clic su "sì", si tornerà al menu principale ma mentre si è ancora in qualsiasi punto dell'applicazione, i risultati continuerebbero a mostrare la precedente gameactivity che avevo. forse ho bevuto davvero finito il gameactivity, .. Qui è il timer e ritorno stampa frammento mia attività:

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

Potrebbe essere che i dati impostati nell'attività dei risultati non vengano cancellati quando si termina l'attività, causando la visualizzazione di dati meno recenti quando si visita nuovamente un'attività. – Hiral

+0

Non si sta arrestando il conto alla rovescia. – user996428

+0

Immagino, suppongo, che il conto alla rovescia funzioni come un thread, che continua a funzionare anche quando si chiama finish(). Prova ad aggiungere una variabile booleana nel timer per controllarne il funzionamento. – Huang

risposta

1

Non v'è alcuna garanzia che finire() si chiuderà immediatamente la vostra attività corrente (E 'fino a Android.)


per risolvere il tuo problema provare questo,


Tenere un riferimento al timer (Si prevede di utilizzare questo per annullare il timer quando congedo utente s la corrente Attività),

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(); 


e in onBackPressed() - annullare il timer in setPositiveButton richiamata,


@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

_ "Non è garantito che finish() chiuda immediatamente la tua attività corrente (è su Android.)" _ - Questo è sbagliato; quando viene chiamato 'finish()', l'attività termina immediatamente. Ciò che è _not_ terminato è il processo in cui l'attività è vissuta. Quindi tutti i dati statici che sono stati impostati durante l'attività rimarranno impostati. –

+0

Il mio male, avrei dovuto fornire ulteriori informazioni.Non esiste garanzia che onDestroy dell'attività venga chiamato immediatamente (anche se l'attività è completamente rimossa dallo schermo) e la memoria conservata non corrisponde solo ai dati statici. – 66CLSjY

+0

@ 66CLSjY - Grazie per la tua risposta dettagliata. sicuramente risolto! :) – omi0301

0

Finitura un'attività genitore dall'attività bambino può essere implementato avviando l'attività figlio utilizzando startActivityForResult e implementando onActivityResult per elaborare il risultato ritorno dall'attività del bambino. Esempio: da ParentActivity, avviare ChildActivity per un risultato utilizzando startActivityForResult(). Quindi, imposta un risultato che informa ParentActivity anche sul risultato finale. Call finish() in ChildActivity. Quando ParentActivity riceve il risultato da ChildActivity, ParentActivity chiama anche finish() su se stesso. E lì puoi iniziare un'altra attività.

Per il codice prega di fare riferimento: http://www.androidcompetencycenter.com/2009/03/tutorial-how-to-start-a-new-activity/

+0

Ho fatto esattamente lo stesso nella mia app, ma il problema è quando si preme il pulsante indietro su Attività figlio, l'attività viene messa in pausa e gli onResume() di Parent Activity e i suoi frammenti sono chiamati perfettamente. Tuttavia 1. L'attività richiede troppo tempo per la finitura e sembra che il telefono sia impiccato. 2. Se la volta successiva mostro una finestra di dialogo non funzionerà, perché l'attività figlio è ancora loro ma non è visibile .... Ora se ruoto lo schermo o vai su un altro frammento onStop e onDestroy del figlio L'attività è chiamata e dopo ciò tutto sembra normale. – aProgrammer

1

La proprietà di CountDownTimer è, persino finito l'attività continua a conto alla rovescia. Se si desidera interrompere questo, inserire countTimerVar.cancel() quando si finish() e in pressBackButton.

Problemi correlati