Android onBackPressed/onUserLeaveHint

На самом деле нужно немного советов. У меня есть Activity, работающий с моей игрой в нем, и когда пользователь нажимает кнопку "Назад", он вернется в главное меню с помощью метода onBackPressed(), но я также переопределяю onUserLeaveHint(), чтобы сделать то же самое действие, если Home Нажата кнопка или получен телефонный звонок. Однако этот метод также вызывается при нажатии кнопки "Назад", что означает, что назначение основного меню вызывается дважды с одним поверх другого.

Если у кого-то есть идея о том, как обойти эту проблему или лучший способ обработки двух событий, это будет очень полезно.

Спасибо.

3 ответа

onUserLeaveHint() является защищенным методом в качестве других методов жизненного цикла активности, и если вы обрабатываете onUserLeaveHint, это позаботится о следующем случае

  • Когда пользователь нажимает домашний ключ
  • Когда пользователь нажимает клавишу
  • Когда пользователь нажимает строку оповещения

В основном это намеки на то, что пользователь пытается покинуть вашу деятельность. Это означает, что если вы обрабатываете onUserLeaveHint(), вам не нужно обрабатывать onBackPressed() в вашем коде.


Просто идея, которая может вам помочь, я использую ее для своего "самодельного" ActionBar, чтобы определить, когда пользователь фактически достиг основной (и последней) активности до выхода. Я запускаю Main-Activity вручную и очищаю весь стек активности, устанавливая флаг FLAG_ACTIVITY_CLEAR_TOP, поэтому, если пользователь снова нажимает кнопку "Назад", приложение закрывается.

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


Просто поместите эту функцию. нет необходимости называть эту функцию и наслаждаться... Надейтесь, что это поможет вам.

@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);
 }
}

licensed under cc by-sa 3.0 with attribution.