2011-07-07 11 views
5

Potrzebuję tylko kilku porad. Mam uruchomioną Aktywność z moją grą i kiedy użytkownik naciśnie przycisk Wstecz, powróci do Menu Głównego za pomocą metody onBackPressed(), ale ja również nadpisuję onUserLeaveHint(), aby wykonać to samo działanie, jeśli Home Przycisk jest naciśnięty lub odebrano połączenie telefoniczne. Jednak ta metoda jest również wywoływana po naciśnięciu przycisku Wstecz, co oznacza, że ​​zamiar Menu głównego jest wywoływany dwa razy z jednym na drugim.Android onBackPressed/onUserLeaveHint

Jeśli ktoś ma pomysł, jak obejść ten problem lub lepszy sposób obchodzenia się z tymi dwoma wydarzeniami, byłby bardzo ceniony.

Dzięki.

Odpowiedz

2

Po prostu pomysł, który może ci pomóc, używam go do mojego "domowego" ActionBara, aby określić, kiedy użytkownik faktycznie dotarł do głównej (i ostatniej) czynności przed wyjściem. Rozpoczynam Main-Activity ręcznie i usuwam cały stos aktywności, ustawiając flagę FLAG_ACTIVITY_CLEAR_TOP, więc jeśli użytkownik ponownie uderzy w przycisk Back, aplikacja zostanie zamknięta.

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

Jeśli otrzymuję dwukrotnie tę samą aktywność, czy można bezpiecznie usunąć ostatnią aktywność ze stosu wyświetlaczy? – Nick

+0

Hmmm dobre pytanie ... = D – iDroid

10

onUserLeaveHint() jest chroniony Sposób innych metod cyklu życia aktywności i jeśli są obsługi onUserLeaveHint to będzie dbać o następującym przypadku

  1. Kiedy użytkownik kliknie domu kluczowych
  2. gdy użytkownik kliknie z powrotem klucz
  3. Kiedy użytkownik kliknie pasek sygnalizacyjny

Basi cally wskazuje na to, że użytkownik próbuje opuścić swoją aktywność. Oznacza to, że w przypadku obsługi onUserLeaveHint() nie trzeba obsługiwać kodu onBackPressed().

+10

Po naciśnięciu klawisza Wstecz nie jest wywoływany. Zostaje on wywołany po naciśnięciu klawisza Home Key lub jeśli aktywność rozpoczyna się od tego działania. –

+1

Jest również wywoływana, gdy czasami rozpoczyna się nowa aktywność – Snake

-1

Po prostu umieść tę funkcję. nie trzeba wywoływać tej funkcji i cieszyć się ... Mam nadzieję, że to ci pomoże.

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

} 
Powiązane problemy