wake-up-neo.com

Die ActionBar-Schaltfläche "Auf" zerstört die übergeordnete Aktivität, "Zurück" nicht

Ich habe eine relativ einfache Android-App mit einer Activity, die eine Liste von Elementen und eine andere zeigt, die Details eines ausgewählten Elements anzeigt. Ich starte die Listenaktivität, die meine oberste Aktivität ist (mit FLAG_ACTIVITY_CLEAR_TOP, um die Login-Aktivität zu löschen, von der diese aufgerufen wird) mit:

Intent intent = new Intent(this, ListInstancesActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

und innerhalb dieser Aktivität befasse ich mich mit einem ausgewählten Artikel mit:

Intent detailIntent = new Intent(this, ShowInstanceActivity.class);
detailIntent.putExtra(ShowInstanceFragment.ARG_ITEM_ID, id);
startActivity(detailIntent);

Alles funktioniert gut, und wenn ich den Softkey "Zurück" drücke, kehre ich wie erwartet zu ListInstancesActivity zurück. Wenn ich jedoch stattdessen die Zurück-/Aufwärts-Taste in der Aktionsleiste drücke, wird die ListInstancesActivity zerstört und neu erstellt. Dies ist schlecht, da dies relativ rechenaufwendig ist.

Wie kann ich die Aktionsleiste genauso wie den Softkey verhalten und zur vorherigen Aktivität zurückkehren, anstatt sie zu zerstören.

Es ist zu beachten, dass ich die Unterstützungsbibliothekversion der Aktionsleiste verwende.

Die relevanten Teile meines AndroidManifest.xml sind

<activity
  Android:name=".agenda.ListInstancesActivity"
  Android:label="@string/list_instances_activity_title">
</activity>
<activity
  Android:name=".agenda.ShowInstanceActivity"
  Android:label="@string/show_instance_activity_title"
  Android:parentActivityName=".agenda.ListInstancesActivity">
</activity>
47
jgm

Sie können überschreiben, was die Actionbar-Schaltfläche oben tun soll:

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {

case Android.R.id.home:
    onBackPressed();
    return true;
}

return super.onOptionsItemSelected(item);
}

Und erstellen Sie den Back-Button-Effekt neu. 

29
Aashir

In der Android-Manifest.xml funktionierte das Hinzufügen des folgenden Attributs für den übergeordneten Aktivitätstag für mich.

Android:launchMode="singleTop"

Referenz: http://developer.Android.com/guide/topics/manifest/activity-element.html

Siehe die ähnliche Frage: Wie kann ich korrekt zu einer übergeordneten Aktivität zurückkehren?

92
vikki_logs

wenn Sie die übergeordnete Aktivität im Manifest angeben, wird sie neu gestartet, wenn Sie in der Aktionsleiste auf die Navigationsschaltfläche klicken.

ich habe diese Frage bereits beantwortet

https://stackoverflow.com/a/32401235/3479012

sie müssen die Nevigation-Schaltfläche in actionbar überschreiben, indem Sie von Android.R.id.home in onOptionsItemSelected darauf zugreifen und die Top-Aktivität beenden.

3
Jolson Da Costa

Anscheinend ist Ihre übergeordnete Aktivität in Ihrem Manifest nicht richtig eingerichtet. Fügen Sie dies in Ihrem ShowInstanceActivity-Aktivitäts-Tag hinzu:

<meta-data Android:name="Android.support.PARENT_ACTIVITY" Android:value=".agenda.ListInstancesActivity" />

Ihr letztes Aktivitäts-Tag sollte also so aussehen:

<activity
  Android:name=".agenda.ShowInstanceActivity"
  Android:label="@string/show_instance_activity_title"
  Android:parentActivityName=".agenda.ListInstancesActivity">
  <meta-data Android:name="Android.support.PARENT_ACTIVITY" Android:value=".agenda.ListInstancesActivity" />
</activity>
1
T3KBAU5
 <?xml version="1.0" encoding="utf-8"?>

<application
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:roundIcon="@mipmap/ic_launcher_round"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme">
    <activity Android:name=".WelcomeActivity">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity Android:name=".MainActivity" />
    <activity Android:name=".StartActivity" />
    <activity
        Android:name=".LoginActivity"
        Android:parentActivityName=".StartActivity"/>
    <activity
        Android:name=".RegisterActivity"
        Android:parentActivityName=".StartActivity"/>


    <activity Android:name=".SettingActivity">
    </activity>


</application>

Anyone can check this code and find error??/

Wenn ich auf die Schaltfläche "Zurück" klicke, wird die App automatisch geschlossen ...

0
Syed Junaid