37 votes

En utilisant la barre d'action home comme bouton haut, l'activité home saveInstanceState est toujours nulle.

Activité A ===cliquez sur le bouton===> Activité B

Lorsque vous appuyez sur le bouton retour, l'activité A n'est pas recréée.

Lorsque l'on appuie sur le bouton home comme bouton up, l'activité A est recréée.

Je sauvegarde donc l'état lorsque A.onSaveInstanceState(Bundle outState) et j'utilise l'état lorsque A.onRestoreInstanceState(Bundle savedInstanceState).

L'enregistrement et l'utilisation fonctionnent bien (sauf pour le bouton d'accueil).

.

Cependant,

Lorsqu'il est pressé, il sert de bouton de montée, le système recrée l'activité A, et savedInstanceState a disparu.

Comment puis-je utiliser l'état d'instance sauvegardé ?

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
        // I do not want this... 
        // Home as up button is to navigate to Home-Activity not previous acitivity
            super.onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

60voto

Aegis Points 4736

Dans le onCreate(), activez le bouton d'accueil.

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

Dans la méthode onOptionItemSelected(), faites ceci.

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

Cela devrait permettre la navigation vers le haut. Si vous voulez que l'activité parente soit restaurée avec un savedInstanceState. Vous devez définir launchMode="singleTop" dans l'activité mère dans le fichier Manifest.

Pour plus d'informations, consultez le site http://developer.Android.com/ : Fournir une navigation ascendante

32voto

Asrin Points 321
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

J'ai utilisé terminer() au lieu de NavUtils ;

0voto

Coreggon Points 124

Comme @Joachim l'a mentionné dans un commentaire, il y a une différence entre R.id.home y android.R.id.home . Dans mon cas, j'ai utilisé R.id.home qui n'a pas fonctionné, et android.R.id.home a fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X