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:parentActivityName
czynności, do której chcesz nawigować, naciskając przycisk Wstecz. Należy to zrobić AndroidManifest.xml
również.
Teraz możesz włączyć przycisk Wstecz w onCreate
metodzie 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 onOptionsItemSelected
metodę 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:parentActivityName
w tobie, AndroidManifest.xml
spowoduje 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