2014-11-20 30 views
7

Próbuję przesłonić onBackPressed(). Wygląda jednak na to, że nie wykryje, gdy kliknę przycisk Wstecz na pasku akcji.Dlaczego funkcja onBackPressed() nie jest wywoływana?

Obecnie mam ten kod:

@Override 
public void onBackPressed() { 

    Log.i("DATA", "Hit onBackPressed()"); 
    super.onBackPressed(); 

} 

Komunikat dziennika nigdy nie pojawia się w LogCat. Wiem, że ta instrukcja dziennika działa, ponieważ jest kopiowana z innej metody z innym komunikatem wyświetlanym w LogCat.

Szukałem odpowiedzi i próbowałem używać onKeyDown i wykrywając, czy kliknięto przycisk BACK, ale nadal mam ten sam problem. Informacja o projekcie:

  • Android Studio 0.9.3
  • Metoda znajduje się w pustym aktywności
  • cel SDK 21
  • minimum sdk 15
  • urządzenie testujące jest Samsung Galaxy 5 (nie emulator)

Każda pomoc będzie bardzo ceniona !!

EDIT:

To jest kopia mojego kodu pracy (jest to kod testowy więc nazwa działalność nie jest opisowe):

public class MainActivity2 extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_activity2); 
    getActionBar().setDisplayHomeAsUpEnabled(true);//Displays the back button 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main_activity2, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 

      Log.i("DATA", "Hit Actionbar Back Button"); 

      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

} 

komunikat „Hit Actionbar Wstecz” pojawia się teraz w LogCat.

+0

'przycisk Wstecz w bar.' działania, ponieważ przycisk w actionbar nie jest przycisk wstecz. To jest przycisk "w górę". zobacz http://developer.android.com/training/implementing-navigation/ancestral.html – njzk2

Odpowiedz

18

onBackPressed() jest wywoływana, gdy użytkownik kliknie przycisk powrotu sprzętu (lub przycisk "góra" na pasku nawigacji), a nie przycisk na pasku akcji. W tym celu należy zastąpić metodę onOptionsItemSelected(). Przykład:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      // click on 'up' button in the action bar, handle it here 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
}  
+2

Nie musi to być przycisk sprzętowy, działa również na przycisk miękkiego przycisku Wstecz na pasku nawigacyjnym. – Lars

+0

@ Lars oops, dobra uwaga! wszystkie telefony z Androidem, które miałem do tej pory, miały sprzętowe przyciski navigaion, dlatego zawsze zapominam o przyciskach na pasku nawigacyjnym. – aga

+0

To działało idealnie. Dzięki! – kkimble006

0

Spróbuj tego kodu,

public class MainActivity2 extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 


@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 

    Toast.makeText(getApplicationContext(), "back press is call", Toast.LENGTH_LONG).show(); 
} 
} 
+0

Toast wciąż się nie pojawił. @aga miał poprawną odpowiedź. Dzięki! – kkimble006

+0

@ kkimble006 czy możesz podzielić się z nami aktywnością pełny kod. –

+0

Mam opublikowany pełny kod mojej aktywności zawodowej @KrunalI – kkimble006

Powiązane problemy