2012-09-14 49 views
5

我有一個測驗應用程序,其中有一個定時器整個遊戲活動在哪裏你應該回答儘可能多的問題,你可以在指定的分鐘內..完成後仍然繼續活動();

分配後的分鐘結束後,它會帶你到結果活動它顯示你的分數。在回按時,我創建了一個警告對話框,詢問您是否要返回主菜單。如果點擊是,頁面應該回到主菜單並停止/殺死遊戲活動。

然而,當我點擊「是」,就返回到主菜單,但同時你還是任何地方應用,結果仍然會從以前的gameactivity我有顯示。也許我說好的真的完成了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

我猜,只是猜測,倒數計時器就像一個線程,當你調用完成其仍將被運行()。嘗試在計時器中添加一個布爾變量來控制其運行。 – Huang

回答

1

沒有保證完成()將立即關閉當前的活動(這是Android的高達)。


爲了解決你的問題試試這個,


堅持和定時器的參考(您將使用該取消計時器,當用戶離開S中的當前活動),

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

_「有)不能保證完成(將立即(這是Android的高達)關閉當前活動」 _ - 這是錯誤的;當調用finish()時,活動立即結束。什麼是未結束的活動所在的過程。因此,在活動期間設置的任何靜態數據都將保持設置狀態。 –

+0

我不好,我應該提供更多信息。沒有保證該活動的onDestroy將被立即調用(即使Activity完全從屏幕上移除)並且保留的內存不僅對應於靜態數據。 – 66CLSjY

+0

@ 66CLSjY - 謝謝您的詳細解答。絕對解決了它! :) – omi0301

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/

+0

我在我的應用程序中完全一樣,但問題是當按下子Activity上的按鈕時,活動暫停,並且父活動及其片段的onResume()完全調用。但是1.活動需要花費太多時間才能完成,而且看起來像是電話被掛起。 2.如果下一次我顯示任何對話框,它將不起作用,因爲子活動仍然是他們的但不可見....現在,如果我旋轉屏幕或去其他一些片段onStop和onDestroy的子活動被稱爲之後,一切似乎都很正常。 – aProgrammer

1

CountDownTimer的財產,即使你完成了它繼續倒計時活動。如果你想停止這一點,把countTimerVar.cancel()當你finish()pressBackButton