web-dev-qa-db-de.com

Android - Zurück-Schaltfläche in der Titelleiste

In vielen Apps (Kalender, Laufwerk, Play Store) verwandelt sich das Symbol in der Titelleiste in eine Zurück-Schaltfläche, wenn Sie auf eine Schaltfläche tippen und eine neue Aktivität eingeben. Bei der von mir erstellten App ist dies jedoch nicht der Fall. Wie bringe ich dieses Symbol dazu, zum vorherigen Bildschirm zurückzukehren?

89
Drew

Es gibt zwei einfache Schritte, um eine Zurück-Schaltfläche in der Titelleiste zu erstellen:

Machen Sie zunächst das Anwendungssymbol mit dem folgenden Code in der Aktivität anklickbar, in deren Titelleiste Sie eine Zurück-Schaltfläche haben möchten:

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

Nachdem Sie den obigen Code hinzugefügt haben, wird links neben dem Anwendungssymbol ein Zurückpfeil angezeigt.

enter image description here

Zweitens müssen Sie, nachdem Sie die obigen Schritte ausgeführt haben, noch Code erstellen, der das click -Ereignis ausnutzt. Beachten Sie dazu, dass beim tatsächlichen Klicken auf das Anwendungssymbol eine onOptionsItemSelected -Methode aufgerufen wird. Um zur vorherigen Aktivität zurückzukehren, fügen Sie diese Methode zu Ihrer Aktivität hinzu und fügen Sie Intent ein, um zur vorherigen Aktivität zurückzukehren. Nehmen wir zum Beispiel an, die Aktivität, die Sie versuchen gehe zurück z heißt MyActivity. Um dorthin zurückzukehren, schreiben Sie die Methode wie folgt:

public boolean onOptionsItemSelected(MenuItem item){
    Intent myIntent = new Intent(getApplicationContext(), MyActivity.class);
    startActivityForResult(myIntent, 0);
    return true;
}

Das ist es!

(In der Android Entwickler-API wird empfohlen, mit dem Manifest herumzuspielen und Dinge wie Android:parentActivityName Hinzuzufügen. Aber das scheint bei mir nicht zu funktionieren. Das oben Genannte ist einfacher und sinnvoller zuverlässiger.)

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

Und in deiner Aktivität

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
126
Luke F.

benutze diesen Code

 @Override
 public void onCreate(Bundle savedInstanceState) {
    ...
   getActionBar().setDisplayHomeAsUpEnabled(true);
 } 

danach schreiben Sie diesen Code in der onOptionsItemSelected Methode

  int id = item.getItemId();

     if (id==Android.R.id.home) {
        finish();
    }
53
anupam sharma

Ich habe es endlich geschafft, die Schaltfläche "Zurück" zur Aktionsleiste/Symbolleiste hinzuzufügen

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}  

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            finish();
            return true;
    }

    return super.onOptionsItemSelected(item);
}

public boolean onCreateOptionsMenu(Menu menu) {
    return true;
}
35
Lucy Fair

1.- Fügen Sie die Aktivität zu AndroidManifest.xml hinzu und stellen Sie sicher, dass Sie die Metadaten bereitstellen:

<activity
    Android:name="com.example.myfirstapp.DisplayMessageActivity"
    Android:label="@string/title_activity_display_message"
    Android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        Android:name="Android.support.PARENT_ACTIVITY"
        Android:value="com.example.myfirstapp.MainActivity" />
</activity>

2. Fügen Sie der onCreate-Methode der Aktivität den folgenden Code hinzu:

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
} 

3.- Überschreiben Sie die onOptionsItemSelected und verwenden Sie die statische Methode NavUtils.navigateUpFromSameTask (), um durch den Stapel zu navigieren.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case Android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

Die Verwendung von navigateUpFromSameTask () ist jedoch nur geeignet, wenn Ihre App der Eigentümer der aktuellen Aufgabe ist (dh, der Benutzer hat diese Aufgabe über Ihre App gestartet). Wenn dies nicht zutrifft und Ihre Aktivität in einer Aufgabe gestartet wurde, die zu einer anderen App gehört, sollte durch das Navigieren nach oben eine neue Aufgabe erstellt werden, die zu Ihrer App gehört. Dazu müssen Sie einen neuen Backstack erstellen.

16
spacebiker

Wenn Ihre Aktivität die Aktivität erweitert

public class YourActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xxx);

        getActionBar().setHomeButtonEnabled(true);

        [...]
    }

    [...]
}

Wenn Ihre Aktion AppCompatActivity erweitert

public class YourActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_xxx);

            getSupportActionBar().setHomeButtonEnabled(true);

            [...]
        }

        [...]
    }

Nichts mehr zu tun, siehe Additionsaktion

[OPTIONAL] Um die übergeordnete Aktivität explizit zu definieren, ändern Sie Ihre Manifest.xml wie folgt:

<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        Android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        Android:name="com.example.myfirstapp.YourActivity "
        Android:label="@string/title_activity_display_message"
        Android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            Android:name="Android.support.PARENT_ACTIVITY"
            Android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

Siehe Geben Sie die übergeordnete Aktivität an

9
tot

fügen Sie in onCreate Function zunächst die folgende Zeile hinzu

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

fügen Sie dann die folgende Funktion in den Code ein:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case Android.R.id.home:
                finish();
                return true;
        }

        return super.onOptionsItemSelected(item);
    }
5
M Anees

Der einfachste Weg und die beste Vorgehensweise, wie Google erklärt hier :

1.Fügen Sie ein Elternteil für Ihre childActivity in das Feld AndroidManifest.xml Ein:

<activity 
        Android:name=".ChildActivity"
        Android:parentActivityName=".ParentActivity" >
</activity>

2.Aktivieren Sie die Zurück-Schaltfläche in Ihrer childActivity:

myActionOrActionSupportBar.setDisplayHomeAsUpEnabled(true);

Arbeitete für mich, ich hoffe, es funktioniert auch für Sie.

5
luke8800gts

Wenn Sie die neue Unterstützungsbibliothek für 5.1 in Android studio verwenden, können Sie diese stattdessen auf Ihrem AppCompatActivity verwenden

 ActionBar actionBar = getSupportActionBar();
 actionBar.setHomeButtonEnabled(true);
 actionBar.setDisplayHomeAsUpEnabled(true);
 actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
 actionBar.setDisplayShowHomeEnabled(true);

prost.

4
ralphgabb

Zuerst müssen Sie diese Codes schreiben

@Override
    protected void onCreate(Bundle savedInstanceState) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

Dann füge diese Zeile im Manifest hinz

 <activity Android:name=".MainActivity"
            Android:parentActivityName=".PreviousActivity"></activity>

Ich denke es wird funktionieren

3
Shahriar Ahmad

Wenn Ihre Aktivität AppCompatActivity erweitert, müssen Sie die onSupportNavigateUp() -Methode wie folgt überschreiben:

public class SecondActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_second);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       getSupportActionBar().setHomeButtonEnabled(true);
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
       ...
   }

   @Override
   public void onBackPressed() {
       super.onBackPressed();
       this.finish();
   }

   @Override
   public boolean onSupportNavigateUp() {
       onBackPressed();
       return true;
   }
}

Fassen Sie Ihre Logik in Ihrer onBackPressed() -Methode an und rufen Sie diese Methode einfach in onSupportNavigateUp() auf, damit die Zurück-Schaltfläche auf dem Telefon und der Pfeil auf der Symbolleiste dasselbe bewirken.

3
Ruzin

Leichte Version ohne ActionBarActivity, die hier immer noch die gleichen Eigenschaften hat:

public class ToolbarConfigurer implements View.OnClickListener {
    private Activity activity;

    public ToolbarConfigurer(Activity activity, Toolbar toolbar, boolean displayHomeAsUpEnabled) {
        toolbar.setTitle((this.activity = activity).getTitle());
        if (!displayHomeAsUpEnabled) return;
        toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        toolbar.setNavigationOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        NavUtils.navigateUpFromSameTask(activity);
    }
}

Verwendung: Setzen Sie new ToolbarConfigurer(this, (Toolbar) findViewById(R.id.my_awesome_toolbar), true); in onCreate.

2
Mygod

Sie müssen den unten genannten Code in die Manifest-Datei einfügen. Suchen Sie nach der Aktivität, in der Sie die Zurückpfeil-Funktionalität hinzufügen möchten. Wenn Sie die finden, dann gut oder erstellen Sie die Aktivität

<activity Android:name=".SearchActivity">

</activity>

Fügen Sie dann die folgenden drei Codezeilen dazwischen hinzu.

<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="com.example.raqib.instadate.MainActivity" />

Und vergessen Sie nicht, diesen Code in onCreate () einzufügen. Methode Ihrer Tätigkeit, in der Sie zurück Pfeil benötigen.

        Toolbar toolbar = (Toolbar) findViewById(R.id.searchToolbar);
    setSupportActionBar(toolbar);
    try{
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }catch(NullPointerException e){
       Log.e("SearchActivity Toolbar", "You have got a NULL POINTER EXCEPTION");
    }

So habe ich das Problem gelöst. Vielen Dank.

1
RaQib

Ich musste einige Antworten mischen, um die richtige Antwort für mich zu erhalten, da meine App 3 Aktivitäten enthält, die jederzeit wiederholt werden können. Aktivität1> Aktivität2> Aktivität3. Wenn ich etwas an meiner Aktivität3 tat, wurde die Zurück-Schaltfläche korrekt zu Aktivität2 zurückgesetzt. In Activity2 wurde jedoch mit finish() eine Sicherungskopie zu Activity3 und nicht zu Activity1 erstellt. Und ich erweitere AppCompatActivity. Meine Lösung war also:

public class Activity2 extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            ...

            getSupportActionBar().setHomeButtonEnabled(true);
        }
    }

in AndroidManifest.xml:

<activity Android:name=".activities.Activity2"
           Android:parentActivityName="com.example.appname.activities.Activity1">
            <meta-data
                Android:name="Android.support.PARENT_ACTIVITY"
                Android:value="com.example.appname.activities.Activity1" />
        </activity>

und schließlich die Aktionsschaltfläche in meinem Menü (Aktionsleiste):

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

            case Android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;

        }

        return super.onOptionsItemSelected(item);

    }

Die Verwendung von NavUtils.navigateUpFromSameTask(this); funktionierte für mich anstelle von finish().

1
Gi Tavares

Wenn Sie eine ActionBar verwenden, sollten Sie diese Dokumentation lesen http://developer.Android.com/reference/Android/app/ActionBar.html#setDisplayHomeAsUpEnabled (boolean)

Dann müssen Sie die Methode onOptionsItemSelected (MenuItem) überschreiben und nach dem Android.R.id.home-Ereignis suchen, das eintreten soll. Dann wissen Sie, dass der Benutzer auf diese Zurück-Schaltfläche in der Aktionsleiste geklickt hat

1
Paul Thompson
Toolbar toolbar=findViewById(R.id.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

if (getSupportActionBar()==null){
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==Android.R.id.home)
    finish();
return super.onOptionsItemSelected(item);
}
0
Abhay Agrawal

Sie können onBackPressed() auch einfach in Ihren onClick-Listener einfügen. Dadurch verhält sich Ihre Schaltfläche wie die Standardschaltflächen "Sichern/Sichern" in Android Apps!

0
user3700215

Dies kann auch ohne Code erfolgen, indem eine übergeordnete Aktivität im App-Manifest angegeben wird. Wenn Sie eine Zurück-Schaltfläche in Aktivität B wünschen, die zu Aktivität A führt, fügen Sie einfach Aktivität A als übergeordnetes Element von Aktivität B im Manifest hinzu.

0
aby4reality

Die anderen Antworten erwähnen nicht, dass Sie dies auch in der XML Ihres Widgets Toolbar festlegen können:

app:navigationIcon="?attr/homeAsUpIndicator"

Zum Beispiel:

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:background="?attr/colorPrimary"
    app:navigationIcon="?attr/homeAsUpIndicator"
    app:popupTheme="@style/AppTheme.PopupOverlay"
    app:title="@string/title_activity_acoustic_progress" />
0
Michael Litvin

Nur etwas zu teilen, das mir geholfen hat und für andere nützlich sein kann. Obwohl die meisten Antworten hier richtig sind, funktionierte dies mit der Funktion getActionBar().setDisplayHomeAsUpEnabled(true); bei mir nicht. Das Problem, das ich hatte, war, dass ich versuchte, eine zweite Aktivität manuell zu erstellen, aber es handelt sich um weitere Details.
Was mein Problem wirklich löste, war das folgende Android Entwickler-Tutorial ( https://developer.Android.com/training/basics/firstapp/starting-activity =) zum Erstellen einer zweiten Aktivität mit Android Studio eigenen Tools:

Create the second activity
1. In the Project window, right-click the app folder and select New > Activity > Empty Activity.
2. In the Configure Activity window, enter "DisplayMessageActivity" for Activity Name and click Finish (leave all other properties set to the defaults).
Android Studio automatically does three things:
- Creates the DisplayMessageActivity file.
- Creates the corresponding activity_display_message.xml layout file.
- Adds the required <activity> element in AndroidManifest.xml.
0
ofri cofri

Dies funktioniert für mich. Angenommen, es gibt zwei Aktivitäten (Activityone, Activitytwo).

Innerhalb von Activityzwei diesen Code verwenden

@Override
protected void onCreate(Bundle savedInstanceState) {
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

On Activityone

//when you need to go second activity
startActivity(new Intent(Activityone.this, Activitytwo.class));

Dies sollte in der zweiten Aktivität in der Manifestdatei enthalten sein

<activity Android:name=".Activitytwo"
        Android:parentActivityName=".Activityone"></activity>

Und das Ergebnis wäre so

enter image description here

0

Für kotlin:

   override fun onOptionsItemSelected(item: MenuItem): Boolean {
        onBackPressed();
        return true;
    }
0
Raluca Lucaci