2011-07-07 39 views
5

真的需要一點建議。我有一個使用我的遊戲運行的Activity,當用戶按下Back按鈕時,它將使用onBackPressed()方法退出到主菜單,但是我也重寫onUserLeaveHint()以執行相同的操作按下按鈕或收到電話。但是,當按下「後退」按鈕時,也會調用此方法,這意味着主菜單方法被重複調用兩次。Android onBackPressed/onUserLeaveHint

如果任何人有關於如何解決這個問題的想法或處理這兩個事件的更好方式,將不勝感激。

謝謝。

回答

2

只是一個想法,可能會幫助你,我用它作爲我的「自制」ActionBar來確定用戶在退出之前是否實際到達主(和最後)活動。我手動啓動主要活動並通過設置FLAG_ACTIVITY_CLEAR_TOP標誌來清除整個活動堆棧,因此如果用戶現在再次點擊後退按鈕,應用程序將會關閉。

Intent intent = new Intent(getContext(), MainMenu.class). 
setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
+0

如果我得到兩次啓動的相同活動,從顯示堆棧中刪除最後一個活動是否安全? – Nick

+0

嗯好問題...... = D – iDroid

10

onUserLeaveHint()是一個受保護的方法作爲活動的其他生命週期方法,如果你正在處理onUserLeaveHint這將採取以下情況下照顧

  1. 當用戶點擊Home鍵
  2. 當用戶點擊返回鍵
  3. 當用戶點擊報警吧

巴斯cally它暗示用戶正試圖離開你的活動。這意味着如果您正在處理onUserLeaveHint(),則無需在代碼中處理onBackPressed()

+10

當後退鍵被按下時,它不被調用。它被稱爲Home Key或者如果一個活動是從該活動中啓動的。 –

+1

有時也會在您開始新活動時調用它 – Snake

-1

只要把這個功能。沒有必要調用這個函數,並享受...希望這對你有所幫助。

@Override 
public void onBackPressed() { 
    try { 
     final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
     builder.setCancelable(false); 
     builder.setPositiveButton(Constant.MSG_BTN_YES, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       finish(); 
       return; 
      } 
     }); 

     builder.setNegativeButton(Constant.MSG_BTN_NO, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       return; 
      } 
     }); 

     builder.setTitle("" + Constant.MSG_ALERT_TITLE); 
     builder.setMessage("DO you want to exit without save?"); 
     builder.create().show(); 
    } catch (Exception e) { 
     Logger.loadStackTrace(e); 
    } 

}