2012-09-14 1 views
5

私はあなたに割り当てられた分後に割り当てられた数分以内にすることができますように多くの質問..アクティビティはfinish()の後もまだ続きます。

に答える必要があります全体gameactivityのタイマーを持ってクイズアプリを持っているが終わって、それは結果のアクティビティが表示されますあなたのスコアを示す。バックプレスでは、メインメニューに戻るかどうか尋ねる警告ダイアログを作成しました。 「はい」をクリックすると、ページはメインメニューに戻り、ゲームの活動を停止/終了します。

しかし、「はい」をクリックすると、メインメニューに戻りますが、アプリケーション内のどこにいても前回のゲームアクティビティからの結果は表示されます。すぐにあなたの現在の活動を終了します)(終了し保証はありません

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

結果アクティビティに設定したデータである可能性もあります。アクティビティを終了するとクリアされないため、再度アクティビティにアクセスしたときに古いデータが表示されることがあります。 – Hiral

+0

カウントダウンを停止していません。 – user996428

+0

私が推測するように、カウントダウンタイマーはスレッドのように機能し、finish()を呼び出しても実行を続けます。ブーリアン変数をタイマーに追加して、実行を制御してください。 – Huang

答えて

1

:本当にgameactivityを終えたぶん私はhadnt ..ここに私の活動から、タイマー、バックプレススニペットである(これは、Android件までです。)ユーザーが離れるときに(あなたはタイマーを解除するためにこれを使用するタイマーへの参照を保持


、これを試してみてくださいあなたの問題を解決するために


現在の活動)、


とonBackPressed(中

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(); 
) - setPositiveButtonコールバックでタイマーをキャンセルし、


@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

_ "finish()があなたの現在のアクティビティをすぐに終了するという保証はありません(これはAndroidまでです)" _ - これは間違っています。 'finish()'が呼び出されるとすぐにアクティビティが終了します。 _not_ endedは、アクティビティが存在したプロセスです。したがって、アクティビティ中に設定されたすべての静的データは設定されたままです。 –

+0

私の悪い、私は追加情報を提供する必要があります。アクティブのonDestroyがただちに呼び出されるという保証はありません(アクティビティが画面から完全に削除されても)、保持されるメモリは静的データに対応するだけでなく、 – 66CLSjY

+0

@ 66CLSjY - 詳細な回答をお願いします。間違いなくそれを解決! :) – omi0301

0

子アクティビティから親アクティビティを仕上げstartActivityForResultを使用して子アクティビティを開始し、onActivityResultを実装して結果を処理することで実装できます子供の活動によって戻る。例:ParentActivityから、startActivityForResult()を使用して結果のChildActivityを開始します。次に、ParentActivityにも終了するように通知する結果を設定します。 ChildActivityのfinish()を呼び出します。 ParentActivityがChildActivityからその結果を受け取ると、ParentActivityはそれ自体でfinish()を呼び出します。そしてそこにあなたは別の活動を始めることができます。コードの場合

参照してください。http://www.androidcompetencycenter.com/2009/03/tutorial-how-to-start-a-new-activity/

+0

私のアプリではまったく同じことをしましたが、子アクティビティの戻るボタンを押すとアクティビティが一時停止し、親アクティビティのonResume()とそのフラグメントが完全に呼び出されます。ただし、1.アクティビティが終了するには時間がかかり、電話のように見えます。 2.次回は、子アクティビティはまだ表示されていないので、ダイアログは表示されません。画面を回転させるか、onStopとonDestroyの子アクティビティの別のフラグメントに移動します。その後はすべて正常と思われます。 – aProgrammer

1

CountDownTimerの性質も、あなたはそれがカウントダウンを続けて活動を終え、です。これをやめたい場合は、finish()pressBackButtoncountTimerVar.cancel()と入力してください。

関連する問題