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.NoTitleBarThema 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.xmlwerden.
Jetzt können Sie die Zurück-Schaltfläche in der onCreateMethode 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 onOptionsItemSelectedMethode 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:parentActivityNamein Ihnen nicht angegeben haben, AndroidManifest.xmlstü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