2011-07-07 38 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); 
    } 

}