Aby włączyć przycisk Wstecz ActionBar, potrzebujesz oczywiście ActionBar w swoim działaniu. Jest to ustalane przez temat, którego używasz. Możesz ustawić motyw swojej aktywności w AndroidManfiest.xml. Jeśli używasz np @android:style/Theme.NoTitleBar. Motywu, nie masz ActionBar. W tym przypadku wywołanie getActionBar()zwróci wartość null. Więc najpierw upewnij się, że masz ActionBar.
Następnym krokiem jest ustawienie android:parentActivityNameczynności, do której chcesz nawigować, naciskając przycisk Wstecz. Należy to zrobić AndroidManifest.xmlrównież.
Teraz możesz włączyć przycisk Wstecz w onCreatemetodzie aktywności „dziecka”.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Teraz powinieneś zaimplementować logikę dla przycisku Wstecz. Po prostu nadpisujesz onOptionsItemSelectedmetodę w swojej aktywności „podrzędnej” i sprawdzasz identyfikator przycisku Wstecz, którym jest android.R.id.home.
Teraz możesz uruchomić metodę, NavUtils.navigateUpFromSameTask(this); ALE jeśli nie określiłeś android:parentActivityNamew tobie, AndroidManifest.xmlspowoduje to awarię aplikacji.
Czasami tego właśnie chcesz, ponieważ przypomina ci to, że zapomniałeś „czegoś”. Jeśli więc chcesz temu zapobiec, możesz sprawdzić, czy Twoja aktywność ma rodzica stosującego tę getParentActivityIntent()metodę. Jeśli zwraca wartość null, nie określono rodzica.
W takim przypadku możesz uruchomić onBackPressed()metodę, która działa w zasadzie tak samo, jak gdyby użytkownik nacisnął przycisk Wstecz na urządzeniu. Dobra implementacja, która nigdy nie powoduje awarii Twojej aplikacji, to:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (getParentActivityIntent() == null) {
Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
onBackPressed();
} else {
NavUtils.navigateUpFromSameTask(this);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Zwróć uwagę, że animacja, którą widzi użytkownik, różni się między NavUtils.navigateUpFromSameTask(this);i onBackPressed().
To od Ciebie zależy, którą drogę wybierzesz, ale uważam, że rozwiązanie jest pomocne, zwłaszcza jeśli używasz klasy bazowej do wszystkich swoich działań.
getActionBar().setDisplayHomeAsUpEnabled(true);w onCreate iswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}wonOptionsItemSelected? oba w ServicesViewActivity