2013-03-10 2 views
0

J'ai accidentellement découvert cela. J'ai un jeu quiz, et j'ai un popup pour la bonne réponse, pour la mauvaise réponse et après la fin du jeu, j'ai un popup pour le résultat. MAIS, aujourd'hui je suis retourné avec le bouton de retour au milieu du jeu, à mon écran d'accueil (pas l'écran d'accueil du jeu, mon écran d'accueil OS) et le jeu était toujours en arrière-plan, comme toutes les autres applications Android. Après quelques secondes ma mauvaise réponse a surgi. :) Le temps était écoulé, et automatiquement la réponse était fausse. Après cela, mon popup de résultat final a continué. Alors, comment puis-je tuer cette activité quand j'appuie sur le bouton de retour? Je ne sais pas si les gars vous avez besoin de mon code, mais juste au cas où est ici mon activité de jeu:Comment tuer l'activité avec le bouton retour?

public class NeogranicenoPetGresaka extends Activity implements OnClickListener{ 

    MyCount brojacVremena = new MyCount(6000, 1000); 

LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>(); 

    private String generateWhereClause(){ 
     StringBuilder result = new StringBuilder(); 
     for (Long l : mAnsweredQuestions){ 
      result.append(" AND _ID <> " + l); 
     } 
     return result.toString(); 
    } 

    Button bIzlazIzKviza, bOdgovor1, bOdgovor2, bOdgovor3, bOdgovor4; 
    TextView question, netacniOdg, score, countdown; 
    int brojacPogresnihOdgovora = 0; 
    int brojacTacnihOdgovora = 0; 
    public static String tacanOdg; 

    Runnable mLaunchTask = new Runnable() { 
     public void run() { 
      nextQuestion(); 
      brojacVremena.start(); 
     } 
    }; 
    Runnable mLaunchTaskFinish = new Runnable() { 
     public void run() { 
      brojacVremena.cancel(); 
      finish(); 
     } 
     }; 


    private class Answer { 
     public Answer(String opt, boolean correct) { 
      option = opt; 
      isCorrect = correct; 
     } 

     String option; 
     boolean isCorrect; 
    } 
    Handler mHandler = new Handler(); 

    final OnClickListener clickListener = new OnClickListener() { 
     public void onClick(View v) { 

      Answer ans = (Answer) v.getTag(); 
      if (ans.isCorrect) { 
       brojacVremena.cancel(); 
       brojacTacnihOdgovora = brojacTacnihOdgovora + 5; 
       Intent i = new Intent("rs.androidaplikacijekvizopstekulture.TACANODGOVOR"); 
       startActivity(i); 
       mHandler.postDelayed(mLaunchTask,1200); 
      } 
     /*else{ 
      brojacVremena.cancel(); 
      brojacPogresnihOdgovora++; 
      Intent i = new Intent(getApplicationContext(), PogresanOdgovor.class); 
      i.putExtra("tacanOdgovor", tacanOdg); 
      startActivity(i); 
      mHandler.postDelayed(mLaunchTask,2200); 
      }*/ 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     setContentView(R.layout.neograniceno); 

     Typeface dugmad = Typeface.createFromAsset(getAssets(), "Bebas.ttf"); 
     Typeface pitanje = Typeface.createFromAsset(getAssets(), "myriad.ttf"); 
     bIzlazIzKviza = (Button) findViewById(R.id.bIzlazIzKvizaN); 
     netacniOdg = (TextView) findViewById(R.id.tvBrojPitanjaN); 
     question = (TextView) findViewById(R.id.tvPitanjeN); 
     bOdgovor1 = (Button) findViewById(R.id.bOdgovorN1); 
     bOdgovor2 = (Button) findViewById(R.id.bOdgovorN2); 
     bOdgovor3 = (Button) findViewById(R.id.bOdgovorN3); 
     bOdgovor4 = (Button) findViewById(R.id.bOdgovorN4); 
     score = (TextView) findViewById(R.id.tvSkor2N); 
     countdown = (TextView) findViewById(R.id.tvCountdownN); 
     bOdgovor1.setTypeface(dugmad); 
     bOdgovor2.setTypeface(dugmad); 
     bOdgovor3.setTypeface(dugmad); 
     bOdgovor4.setTypeface(dugmad); 
     bIzlazIzKviza.setTypeface(dugmad); 
     netacniOdg.setTypeface(dugmad); 
     question.setTypeface(pitanje); 
     score.setTypeface(dugmad); 
     countdown.setTypeface(dugmad); 

     nextQuestion(); //startuje prvo pitanje! 
     brojacVremena.start(); //startuje brojac vremena 
    } 


    public class MyCount extends CountDownTimer { 

     public MyCount(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     @Override 
     public void onFinish() { 

      brojacPogresnihOdgovora++; 
      Intent i = new Intent(getApplicationContext(), PogresanOdgovor.class); 
      i.putExtra("tacanOdgovor", tacanOdg); 
      startActivity(i); 
      mHandler.postDelayed(mLaunchTask,2200); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      countdown.setText("" + millisUntilFinished/1000); 
     } 
    } 

     public void onClick(View v) { 
     // TODO Auto-generated method stub 


    } 
    @Override 
     protected void onPause() { 
      // TODO Auto-generated method stub 
      super.onPause(); 
     } 

    public void nextQuestion() { 


     TestAdapter mDbHelper = new TestAdapter(this); 
     mDbHelper.createDatabase(); 

     try{ //Pokusava da otvori db 

      mDbHelper.open(); //baza otvorena 

      Cursor c = mDbHelper.getTestData(generateWhereClause()); 
      mAnsweredQuestions.add(c.getLong(0)); 

      List<Answer> labels = new ArrayList<Answer>(); 

      labels.add(new Answer(c.getString(2), true)); 
      labels.add(new Answer(c.getString(3), false)); 
      labels.add(new Answer(c.getString(4), false)); 
      labels.add(new Answer(c.getString(5), false)); 

      Collections.shuffle(labels); 

      tacanOdg = c.getString(2); 

      if(brojacPogresnihOdgovora < 20){ 


     question.setText(c.getString(1)); 

     bOdgovor1.setText(labels.get(0).option); 
     bOdgovor1.setTag(labels.get(0)); 
     bOdgovor1.setOnClickListener(clickListener); 

     bOdgovor2.setText(labels.get(1).option); 
     bOdgovor2.setTag(labels.get(1)); 
     bOdgovor2.setOnClickListener(clickListener); 

     bOdgovor3.setText(labels.get(2).option); 
     bOdgovor3.setTag(labels.get(2)); 
     bOdgovor3.setOnClickListener(clickListener); 

     bOdgovor4.setText(labels.get(3).option); 
     bOdgovor4.setTag(labels.get(3)); 
     bOdgovor4.setOnClickListener(clickListener); 

     netacniOdg.setText("" + brojacPogresnihOdgovora); 
     score.setText("Score: " + brojacTacnihOdgovora); 
      } 
      else{ 
       brojacVremena.cancel(); 
       Intent i = new Intent(getApplicationContext(), Rezultat.class); 
       i.putExtra("noviRezultat", brojacTacnihOdgovora); 
       startActivity(i); 
       String brojacTacnihOdgovoraString = String.valueOf(brojacTacnihOdgovora); 
       mHandler.postDelayed(mLaunchTaskFinish,4000); 
       //SwarmLeaderboard.submitScore(6863, brojacTacnihOdgovora); 
       HeyzapLib.submitScore(this, brojacTacnihOdgovoraString, "Osvojili ste " + brojacTacnihOdgovoraString + " poena!", "1T3"); 
      } 
     } 
     finally{ // kada zavrsi sa koriscenjem baze podataka, zatvara db 
      mDbHelper.close(); 
     } 

    bIzlazIzKviza.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      finish(); 
     } 
    }); 
    } 
} 

J'ai essayé de placer cela dans mon code, mais il ne fonctionne pas:

@Override 
    public void onBackPressed() { 
      super.onBackPressed(); 
      this.finish(); 
    } 

également essayé, ça n'a pas marché:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    { 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

Si vous utilisez l'anglais pour nommer vos variables et les classes, votre code pourrait être compréhensible ... pour rendre la solution courte: Stop/Pause votre countdowntimer lorsque votre activité appelle 'OnPause() 'ou' onStop() ' – WarrenFaith

Répondre

5

L'émission nous indique que l'activité est arrêtée mais que les sujets que vous avez créés sont en cours d'exécution. Vous devez donc remplacer onStop et annuler les threads d'arrière-plan.

Quelque chose comme:

@Override public void onStop() { 
    super.onStop(); 
    brojacVremena.cancel(); 
} 
+0

Cela a fonctionné. Merci beaucoup. – user2083882

1
Intent a = new Intent(this,"another activity class to go to"); 
    a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)|Intent.FLAG_ACTIVITY_NO_HISTORY);//leaves no history of the activity and clears the backstack. 
    startActivity(a); 
    finish(); 

ont également un regard sur ce lien http://developer.android.com/training/basics/activity-lifecycle/index.html.

Pour en savoir plus sur l'activité, retournez la pile http://developer.android.com/guide/components/tasks-and-back-stack.html. La combinaison du lien ci-dessus devrait vous donner un aperçu de ce que vous voulez faire pour résoudre votre problème.

+0

Merci, je vais essayer. – user2083882

Questions connexes