5

割り当てられた分以内にできるだけ多くの質問に答える必要があるゲームアクティビティ全体のタイマーを備えたクイズアプリがあります..

割り当てられた分数が終了すると、スコアを示す結果アクティビティに移動します。バック プレスで、メイン メニューに戻るかどうかを尋ねるアラート ダイアログを作成しました。はいをクリックすると、ページはメイン メニューに戻り、ゲーム アクティビティを停止/強制終了します。

ただし、[はい] をクリックすると、メイン メニューに戻りますが、アプリケーションのどこにいても、以前のゲーム アクティビティの結果が表示されます。多分私はゲームアクティビティを本当に終えていなかった..これは私のアクティビティからのタイマーとバックプレスのスニペットです:

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

4 に答える 4

2

finish() が現在のアクティビティをすぐに閉じるという保証はありません (Android 次第です)。


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


タイマーへの参照を保持します (これを使用して、ユーザーが現在のアクティビティを離れたときにタイマーをキャンセルします)。

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


および onBackPressed() で - 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();
}
于 2012-09-14T07:11:13.300 に答える
1

のプロパティCountDownTimerは、アクティビティを終了してもカウントダウンし続けます。これを止めたい場合は、countTimerVar.cancel()when youfinish()と in を入れてくださいpressBackButton

于 2012-09-14T07:15:14.143 に答える
0

子アクティビティからの親アクティビティの終了は、startActivityForResult を使用して子アクティビティを開始し、onActivityResult を実装して子アクティビティによって返される結果を処理することで実装できます。例: ParentActivity から、 を使用して結果の ChildActivity を開始しstartActivityForResult()ます。次に、ParentActivity にも終了を通知する結果を設定します。ChildActivity で finish() を呼び出します。ParentActivity が ChildActivity からその結果を受け取ると、ParentActivity は自分自身に対しても finish() を呼び出します。そこで、別のアクティビティを開始できます。

コードについては、http ://www.androidcompetencycenter.com/2009/03/tutorial-how-to-start-a-new-activity/ を参照してください。

于 2012-09-14T07:12:35.430 に答える