Schaltfläche "Zurück" in der Aktionsleiste anzeigen

180

Ich versuche, eine Back buttonauf der Action barvorherigen Seite / Aktivität oder auf der Hauptseite (erste Öffnung) anzuzeigen . Und ich kann es nicht tun.

mein Code.

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

Der Code ist in onCreate.

Dany Maor
quelle
18
Verwenden Sie: getSupportActionBar (). SetDisplayHomeAsUpEnabled (true);
Sukitha Udugamasooriya
@SukithaUdugamasooriya Vielen Dank
Sardorbek Rkh

Antworten:

206

Nun, dies ist einfach, um die Schaltfläche "Zurück" anzuzeigen

actionBar.setDisplayHomeAsUpEnabled(true);

Anschließend können Sie das Back-Ereignis unter onOptionsItemSelected anpassen

case android.R.id.home:
this.finish();
return true;
Fhamicode
quelle
Ich habe die obigen Zeilen innerhalb des on onOptionsItemSelected (MenuItem-Elements) hinzugefügt. Da ich bereits ein Menü in der Aktion Bad habe, in dem die IDs aufgelistet sind, um die Menüoptionen umzuleiten, funktioniert die Home-ID nicht, wenn Sie darauf
Wenn Sie ein seltsames Verhalten feststellen (wie in: Sie verwenden die Zurück-Schaltfläche (R.id.home) eines Fragments und schließen am Ende die Aktivität), stellen Sie sicher, dass für diese Aktivität NICHT "android: noHistory" eingestellt ist, denn wenn Wenn Sie von einem Fragment zur "Übersicht" der Aktivität zurückkehren, wird sie beendet.
Igor
2
Stellen Sie sicher, dass Sie die übergeordnete Aktivität in AndroidMenifest.xml so einstellen, dass die Schaltfläche R.id.home funktioniert.
Leap Hawk
192

Ich denke, dies onSupportNavigateUp()ist der beste und einfachste Weg. Überprüfen Sie die folgenden Schritte. Schritt 1 ist notwendig, Schritt zwei haben Alternative.

Schritt 1 zeigt die Schaltfläche "Zurück": Fügen Sie diese Zeile in die onCreate()Methode ein, um die Schaltfläche "Zurück" anzuzeigen.

assert getSupportActionBar() != null;   //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true);   //show back button

Schritt 2 Implementierung des Zurückklickens: Überschreiben Sie diese Methode

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

Das ist alles, was Sie getan haben
ODER Schritt 2 Alternative: Sie können der Aktivität in der Manifestdatei als Meta hinzufügen

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

Bearbeiten: Wenn Sie AppCompatAktivität nicht verwenden support, verwenden Sie kein Wort, das Sie verwenden können

getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`

// And override this method
@Override 
public boolean onNavigateUp(){ 
     finish(); 
     return true; 
}

Danke an @atariguy für den Kommentar.

Inzimam Tariq IT
quelle
2
Diese Lösung eignet sich hervorragend, wenn Sie Daten an die übergeordnete Aktivität zurücksenden müssen oder wenn Sie die Werte von EditText in der übergeordneten Aktivität beibehalten möchten. Ich habe onOptionsItemSelectedLösungen ausprobiert , dies aber nicht getan.
Weeix
3
Beste Lösung +10.
Satheeshwaran
3
Wenn Sie die Unterstützungsbibliothek für die Aktionsleiste nicht verwenden, ändern Sie sie wie folgt: getActionBar().setDisplayHomeAsUpEnabled(true); @Override public boolean onNavigateUp(){ finish(); return true; }
atariguy
1
Phänomenal. +1. Einfach. Elegant. Wunderschönen. :)
Rohit Kumar
1
Danke für Ihre Hilfe. Mit Manifest hat es nicht funktioniert, aber mit dem Code, den es funktioniert
Santosh Devnath
70

Die Magie passiert in onOptionsItemSelected.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; go home
            Intent intent = new Intent(this, HomeActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
Matthias Räuber
quelle
1
In meinem Fall möchte ich auf der Seite, auf der das Ereignis onOptionsItemSelected (MenuItem item) nicht vorhanden ist, die Schaltfläche "Zurück" hinzufügen. Gibt es eine andere Lösung dafür?
Vidhi
1
Sie sollten getActionBar().setDisplayHomeAsUpEnabled(true);Ihre onCreateMethod zuerst für die Schaltfläche "
Zurück
1
Ich denke, wenn Sie dies tun, gehen Sie nicht zurück, selbst wenn Sie die vorherige Aktivität erneut starten und jetzt eine Instanz mehr davon haben, und Sie gehen immer vorwärts und vorwärts, bis ein Stapelüberlauf auftritt, wenn Sie lange genug fortfahren. Ich denke, die Antwort von Igor ist richtig. Sie sollten diese Aktivität mit finish () beenden und sich vom Framework zur vorherigen aktiven Instanz zurückführen lassen.
Reijo Korhonen
2
Verwenden Sie die this.onBackPressed();Methode, wenn der Benutzer auf die Schaltfläche "Zurück" klickt.
CaptRisky
47

Offizielle Lösung

Fügen Sie diese beiden Codefragmente zu Ihrer SubActivity hinzu

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

@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);
}

Fügen Sie dem Manifest Metadaten und parentActivity hinzu, um das niedrigere SDK zu unterstützen.

 <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.SubActivity"
        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>

Referenz hier: http://developer.android.com/training/implementing-navigation/ancestral.html

johlen
quelle
5
Hinweis: Wenn Sie Support-Bibliotheken für die Abwärtskompatibilität verwenden, müssen Sie "getSupportActionBar ()" anstelle von "getActionBar ()" verwenden. Dies ist die vollständigste und offiziellste Antwort.
Christopher Bull
32

Fügen Sie diese Zeilen zu onCreate () hinzu

android.support.v7.app.ActionBar actionBar = getSupportActionBar();
   actionBar.setHomeButtonEnabled(true);
   actionBar.setDisplayHomeAsUpEnabled(true);

und in onOptionItemSelected

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                //Write your logic here
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Hoffe das wird dir helfen ..!

Abhishek
quelle
26

Probieren Sie diesen Code aus und berücksichtigen Sie ihn nur, wenn Sie die Schaltfläche "Zurück" benötigen.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //YOUR CODE
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //YOUR CODE
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}
Jaime
quelle
17

Fügen Sie zu Ihrer onCreateMethode Folgendes hinzu:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Während der Definition in der AndroidManifest.xmlübergeordneten Aktivität (die Aktivität, die aufgerufen wird, sobald die Zurück-Schaltfläche in der Aktionsleiste gedrückt wird):

Fügen Sie in Ihrer <activity>Definition im Manifest die folgende Zeile hinzu:

android:parentActivityName="com.example.activities.MyParentActivity"
Bruno Peres
quelle
Sie müssen den Manifest-Code nur eingeben, wenn Sie Geräte vor 4.0 unterstützen möchten. Das erste Codebit ist jedoch eine bessere Lösung für die aktuellen Bibliotheken.
Louie Bertoncin
8

Ich weiß, dass ich etwas spät dran bin, konnte dieses Problem jedoch beheben, indem ich den Dokumenten direkt folgte.

Fügen Sie das Metadaten-Tag hinzu AndroidManifest.xml(damit das System es weiß).

 <activity
        android:name=".Sub"
        android:label="Sub-Activity"
        android:parentActivityName=".MainChooser"
        android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainChooser" />
    </activity>

Aktivieren Sie als Nächstes die Schaltfläche "Zurück" ("Auf") in Ihrem MainActivity

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_child);
 
    // my_child_toolbar is defined in the layout file 
    Toolbar myChildToolbar =
        (Toolbar) findViewById(R.id.my_child_toolbar);
    setSupportActionBar(myChildToolbar);
 
    // Get a support ActionBar corresponding to this toolbar 
    ActionBar ab = getSupportActionBar();
 
    // Enable the Up button 
    ab.setDisplayHomeAsUpEnabled(true);
    } 

Und Sie werden alle eingerichtet sein!

Quelle: Android Developer Documentation

Avi Parshan
quelle
6

Ich weiß, dass die oben genannten viele hilfreiche Lösungen sind, aber dieses Mal habe ich diesen Artikel gelesen (aktuelles Android Studio 2.1.2 mit SDK 23). Einige der oben genannten Methoden funktionieren nicht.

Unten ist meine Lösung für die Unteraktivität MapsActivity

Zuerst müssen Sie parentActivity in hinzufügen

AndroidManifest.xml

so was :

<application ... >
    ...
    <!-- Main activity (which has no parent activity) -->
    <activity
        android:name="com.example.myapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        .....
        android:parentActivityName=".MainActivity" >
        <!-- Support Parent activity for Android 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myapp.MainActivity" />
    </activity>
</application>

Stellen Sie zweitens sicher, dass Ihre Unteraktivität erweitert wird AppCompatActivityund nicht FragmentActivity.

Drittens überschreiben onOptionsItemSelected()Methode

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon action bar is clicked; go to parent activity
                this.finish();
                return true;
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

Hoffe das wird helfen!

Postace
quelle
4

Versuchen Sie dies in Ihrem onCreate ()

 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true);

Und für clickevent,

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon in action bar clicked; goto parent activity.
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
Melbourne Lopes
quelle
4

Um dies zu erreichen, gibt es einfach zwei Schritte:

Schritt 1: Gehen Sie zu AndroidManifest.xmlund fügen Sie diesen Parameter in das <activity>Tag ein -android:parentActivityName=".home.HomeActivity"

Beispiel:

<activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

Schritt 2: ActivityDetailFügen Sie Ihre actionfür die vorherige Seite / Aktivität hinzu

Beispiel:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return super.onOptionsItemSelected(item);
}
Vivek Hande
quelle
4

in der onCreate-Methode write-

Toolbar toolbar = findViewById(R.id.tool);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
    finish();
}

und das ist die XML-Datei-

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:id="@+id/tool">

und in styles.xml ändern Sie es in

Theme.AppCompat.Light.NoActionBar

Das ist alles was wir tun müssen.

PAWAN LAKHOTIA
quelle
4

Das ist einfach und funktioniert bei mir sehr gut

Fügen Sie dies in die onCreate () -Methode ein

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Fügen Sie diese Methode außerhalb von oncreate () hinzu

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}
Muhaiminur Rahman
quelle
3

Fügen Sie in Ihrer onCreate()Methode diese Zeile hinzu

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Fügen Sie in derselben Aktivität diese Methode hinzu, um den Klick auf die Schaltfläche zu verarbeiten

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        this.finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}
Khubaib Raza
quelle
2

Ich habe auf diese Weise gelöst

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

@Override
public void onBackPressed(){
    Intent backMainTest = new Intent(this,MainTest.class);
    startActivity(backMainTest);
    finish();
}
Ardit Zeza
quelle
1

Mein Arbeitscode, um zum Bildschirm zurückzukehren.

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

    case android.R.id.home:

        Toast.makeText(getApplicationContext(), "Home Clicked",
                Toast.LENGTH_LONG).show();

        // go to previous activity
        onBackPressed();

        return true;

    }

    return super.onOptionsItemSelected(item);
}
Shihab Uddin
quelle
1
 public void initToolbar(){
       //this set back button 
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
       //this is set custom image to back button
       getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image);
}


//this method call when you press back button
@Override
public boolean onSupportNavigateUp(){
    finish();
    return true;
}
pruthwiraj.kadam
quelle
1
ActionBar actionBar=getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

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

    return super.onOptionsItemSelected(item);
}
Akshay Shetty
quelle
1

Es könnte zu spät sein, um zu antworten, aber ich habe meiner Meinung nach eine kürzere und funktionalere Lösung.

// Inside your onCreate method, add these.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);

// After the method's closing bracket, add the following method exactly as it is and voiulla, a fully functional back arrow appears at the action bar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}
ndungujan
quelle
1

In oncreate (); schreibe diese Zeile->

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Implementieren Sie dann die folgende Methode in dieser Klasse

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        // app icon in action bar clicked; go home
      onBackPressed();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}
Manthan Patel
quelle
1

Manifest.xml

<activity
            android:name=".Activity.SecondActivity"
            android:label="Second Activity"
            android:parentActivityName=".Activity.MainActivity"
            android:screenOrientation="portrait"></activity>
Sameer Srivastava
quelle
1

Um die Zurück-Schaltfläche der Aktionsleiste in Kotlin anzuzeigen, gibt es zwei Möglichkeiten, sie zu implementieren

1. Verwenden der von Android bereitgestellten Standardaktionsleiste - Ihre Aktivität muss ein Thema mit einer Aktionsleiste verwenden, z. B.: Theme.AppCompat.Light.DarkActionBar

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val actionBar = supportActionBar
    actionBar!!.title = "your title"
    actionBar.setDisplayHomeAsUpEnabled(true)
    //actionBar.setDisplayHomeAsUpEnabled(true)
}

override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}

2. Entwerfen Sie Ihre eigene Aktionsleiste - deaktivieren Sie die Standardaktionsleiste - z. B.: Theme.AppCompat.Light.NoActionBar - Fügen Sie Ihrer activity.xml ein Layout hinzu

    <androidx.appcompat.widget.Toolbar
     android:id="@+id/main_toolbar"
     android:layout_width="match_parent"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toTopOf="parent">

     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:layout_editor_absoluteX="16dp">

         <TextView
             android:id="@+id/main_toolbar_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="Your Title"
             android:textSize="25sp"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

     </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.appcompat.widget.Toolbar>
  • onCreate
override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)

     setSupportActionBar(findViewById(R.id.main_toolbar))
 }
  • Erstellen Sie Ihre eigene Schaltfläche
<?xml version="1.0" encoding="utf-8"?>
<menu
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto" >

 <item
     android:id="@+id/main_action_toolbar"
     android:icon="@drawable/ic_main_toolbar_item"
     android:title="find"
     android:layout_width="80dp"
     android:layout_height="35dp"
     app:actionLayout="@layout/toolbar_item"
     app:showAsAction="always"/>

</menu>
  • in YourActivity.kt
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
     menuInflater.inflate(R.menu.main_toolbar_item, menu)

     leftToolbarItems = menu!!.findItem(R.id.main_action_toolbar)
     val actionView = leftToolbarItems.actionView
     val badgeTextView = actionView.findViewById<TextView>(R.id.main_action_toolbar_badge)
     badgeTextView.visibility = View.GONE

     actionView.setOnClickListener {
         println("click on tool bar")
     }
     return super.onCreateOptionsMenu(menu)
 }
Chea Sambath
quelle
0

Fügen Sie den folgenden Code in die Funktion onCreate ein:

getSupportActionBar (). setDisplayHomeAsUpEnabled (true);

Und dann überschreiben: @Override public boolean onOptionsItemSelected (MenuItem-Element) {onBackPressed (); return true; }}

user7347514
quelle
0

In der aktualisierten Version funktioniert getActionBar () nicht!

Stattdessen können Sie dies auf diese Weise tun

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

Fügen Sie die Schaltfläche "Zurück" in der Android-Titelleiste hinzu. Dies hilft Ihnen im Jahr 2020

pankaj maurya
quelle
Ihre letzten Antworten verlinken beide auf dieselbe Site. Sind Sie in irgendeiner Weise mit dieser Site verbunden? Wenn Sie verbunden sind, müssen Sie diese Zugehörigkeit in der Post offenlegen . Wenn Sie keine Zugehörigkeit offenlegen, wird dies als Spam betrachtet. Siehe: Was bedeutet "gute" Eigenwerbung? , einige Tipps und Ratschläge zur Eigenwerbung , Was ist die genaue Definition von "Spam" für Stapelüberlauf? und was macht etwas Spam .
Makyen