Afficher le bouton de retour sur la barre d'action

j'essaie d'afficher un Back button sur le Action bar pour déplacer la page précédente/activité ou à la page principale (ouverture). Et je ne peux pas le faire.

mon code.

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

le code est dans onCreate .

139
demandé sur Shihab Uddin 2013-03-28 19:59:34

16 réponses

Eh bien, il s'agit d'un simple pour afficher le bouton Retour

actionBar.setDisplayHomeAsUpEnabled(true);

et ensuite vous pouvez personnaliser l'événement de dos à onOptionsItemSelected

case android.R.id.home:
this.finish();
return true;
174
répondu fhamicode 2013-07-23 06:08:17

je pense que onSupportNavigateUp() est la meilleure et la plus facile façon de le faire, vérifier le code ci-dessous.

si vous voulez par programmation Ajouter cette ligne dans onCreate() méthode

getSupportActionBar().setDisplayHomeAsUpEnabled(true);  

Note: assurez-vous que Actionbar n'est pas null.

et remplacer cette méthode

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

c'est ça

OU Non par programmation, vous pouvez ajouter des méta-l'activité dans le fichier de manifeste comme

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

Edit: Si vous n'êtes pas à l'aide de AppCompat Activité, alors n'utilisez pas support word, vous pouvez utiliser

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

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

merci à @atariguy pour vos commentaires.

135
répondu Inzimam Tariq IT 2018-02-23 11:12:38

La magie qui se passe dans 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);
    }
}
61
répondu Matthias Robbers 2013-03-28 21:06:06

solution officielle

ajoutez ces deux extraits de code à votre sous-activité

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

ajouter les méta-données et la parentactivité pour manifester pour supporter le sdk inférieur.

 <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>

référence ici: http://developer.android.com/training/implementing-navigation/ancestral.html

43
répondu hoot 2014-04-11 17:20:54

ajouter ces lignes à onCreate()

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

et en option selected

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

espérons que cela vous aidera..!

30
répondu Abhishek 2015-10-21 06:12:14

essayez ce code, considère que si vous avez besoin du bouton arrière.

@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;
}
19
répondu Jaime 2014-07-15 20:11:00

sur votre onCreate méthode ajouter:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

tout en définissant dans le AndroidManifest.xml l'activité parent (l'activité qui sera appelée une fois que le bouton précédent dans la barre d'action est pressé):

dans votre <activity> définition sur le Manifeste, ajouter la ligne:

android:parentActivityName="com.example.activities.MyParentActivity"
14
répondu Bruno Peres 2015-06-11 19:34:55

je sais que je suis un peu en retard, mais j'ai pu corriger ce problème en suivant le docs directement.

ajouter la balise meta-data à AndroidManifest.xml (pour que le système le sache)

 <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>

ensuite, activez le bouton back (up) dans votre 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);
    } 

Et, vous serez tous ensemble!

Source: Android Developer Documentation

8
répondu Avi Parshan 2017-03-06 08:24:15

je sais que ce qui précède sont de nombreuses solutions utiles, mais cette fois je lis cet article (actuel Studio Android 2.1.2 avec sdk 23) une méthode ci-dessus ne fonctionne pas.

ci-dessous est ma solution pour la sous-activité est MapsActivity

tout d'abord, vous devez ajouter l'activité parentale dans

AndroidManifest.xml

comme ceci:

<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>

deuxièmement, assurer que votre sous-Activité s'étend AppCompatActivity , pas FragmentActivity.

en Troisième lieu, remplacer onOptionsItemSelected() méthode

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

Espère que cela va vous aider!

5
répondu postace 2016-07-02 03:47:39

pour y parvenir, il y a simplement deux étapes,

Étape 1: Allez à AndroidManifest.xml et ajoutez ce paramètre dans la balise <activity> - android:parentActivityName=".home.HomeActivity"

exemple:

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

Étape 2: dans ActivityDetail ajouter votre action pour la page/l'activité précédente

exemple:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return super.onOptionsItemSelected(item);
}
3
répondu Vivek Hande 2017-10-24 07:41:15

dans la méthode onCreate écriture

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

et voici le fichier xml -

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

et dans styles.changer le format en

Theme.AppCompat.Light.NoActionBar

c'est tout ce que nous avons à faire.

3
répondu PAWAN LAKHOTIA 2018-04-05 11:40:07

essayez ceci, Dans votre onCreate()

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

et pour 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);
        }
    }
2
répondu Melbourne Lopes 2015-08-18 15:38:14

J'ai résolu de cette façon

@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();
}
2
répondu Ardit Zeza 2017-02-15 14:39:52

mon code de travail pour retourner l'écran.

@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);
}
1
répondu Shihab Uddin 2015-10-14 06:57:00
 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;
}
1
répondu pruthwiraj.kadam 2017-10-05 06:00:03
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);
}
1
répondu akshay shetty 2018-04-05 11:29:10