Um die Schaltfläche "ActionBar zurück" zu aktivieren, benötigen Sie offensichtlich eine ActionBar in Ihrer Aktivität. Dies wird durch das von Ihnen verwendete Thema festgelegt. Sie können das Thema für Ihre Aktivität in der AndroidManfiest.xml
. Wenn Sie zB das @android:style/Theme.NoTitleBar
Thema verwenden, haben Sie keine ActionBar. In diesem Fall gibt der Aufruf von getActionBar()
null zurück. Stellen Sie also sicher, dass Sie zuerst eine ActionBar haben.
Der nächste Schritt besteht darin android:parentActivityName
, die Aktivität festzulegen, zu der Sie navigieren möchten, wenn Sie die Zurück-Taste drücken. Dies sollte auch in der gemacht AndroidManifest.xml
werden.
Jetzt können Sie die Zurück-Schaltfläche in der onCreate
Methode Ihrer "untergeordneten" Aktivität aktivieren .
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Jetzt sollten Sie die Logik für die Zurück-Schaltfläche implementieren. Sie überschreiben einfach die onOptionsItemSelected
Methode in Ihrer "untergeordneten" Aktivität und überprüfen die ID der Schaltfläche "Zurück" android.R.id.home
.
Jetzt können Sie die Methode NavUtils.navigateUpFromSameTask(this);
auslösen , ABER wenn Sie die android:parentActivityName
in Ihnen nicht angegeben haben, AndroidManifest.xml
stürzt Ihre App ab.
Manchmal ist es das, was Sie wollen, weil es Sie daran erinnert, dass Sie "etwas" vergessen haben. Wenn Sie dies verhindern möchten, können Sie mithilfe der getParentActivityIntent()
Methode überprüfen, ob Ihre Aktivität übergeordnete Elemente hat. Wenn dies null zurückgibt, haben Sie das übergeordnete Element nicht angegeben.
In diesem Fall können Sie die onBackPressed()
Methode auslösen, die im Grunde das Gleiche bewirkt, als würde der Benutzer die Zurück-Taste am Gerät drücken. Eine gute Implementierung, die Ihre App niemals zum Absturz bringt, wäre:
@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);
}
}
Bitte beachten Sie, dass die Animation, die der Benutzer sieht, zwischen NavUtils.navigateUpFromSameTask(this);
und unterschiedlich ist onBackPressed()
.
Es liegt an Ihnen, welchen Weg Sie einschlagen, aber ich fand die Lösung hilfreich, insbesondere wenn Sie für alle Ihre Aktivitäten eine Basisklasse verwenden.
getActionBar().setDisplayHomeAsUpEnabled(true);
in onCreate undswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
inonOptionsItemSelected
? beide in ServicesViewActivity