43 votes

Comment trouver la dernière activité à partir de laquelle l'activité en cours est ouverte dans Android ?

J'ai une activité qui peut être ouverte à partir de plus de 4 ou 5 activités différentes afin que je puisse trouver à partir de quelle activité mon activité actuelle est appelée....

Si vous avez une idée, aidez-moi.

46voto

Matthew Willis Points 26453

Vous pouvez ajouter des éléments supplémentaires à l'intention que vous utilisez pour lancer l'activité afin d'indiquer d'où vient l'intention ou quelle est la demande.

Par exemple :

Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("caller", "MainActivity");
startActivity(intent);

et ensuite votre OtherActivity pourrait détecter l'"appelant" dans son onCreate :

String caller     = getIntent().getStringExtra("caller");
Class callerClass = Class.forName(caller);

15voto

leventcinel Points 348

Android a une fonction pour cela, si vous utilisez startActivityForResult :

ComponentName prev = this.getCallingActivity() ;

2voto

Mettez quelques extras à l'intention des différentes activités.

eg :

startActivity(new Intent(this, otherActivity.class).putExtra("from" , "previousActivity"));

et obtenir des extras dans l'activité en cours comme

string act = getIntent().getStringExtra("from");

donc "act" vous indiquera l'activité d'appel.

2voto

Inzimam Tariq IT Points 3885

Créez un Interfare Et mettez des valeurs pour vos activités Puis passez ces valeurs dans l'Intent Et obtenez dans l'activité enfant regardez ce morceau de code

public interface ActivityRefs {
            public static final int ACTIVITY_1 = 1;
            public static final int ACTIVITY_2 = 2;
            public static final int ACTIVITY_3 = 3;
}

Créer un Intent et passer la valeur comme ceci dans l'activité Calling

intent.putExtra("callingActivity", ActivityRefs.ACTIVITY_1);

Ensuite, dans l'activité Called

int callingActivityName = getIntent().getIntExtra("callingActivity", 0);

        switch (callingActivityName) {
        case ActivityConstants.ACTIVITY_1:
            // Activity3 is started from Activity1
            break;
        case ActivityConstants.ACTIVITY_2:
            // Activity3 is started from Activity2
            break;
        }

1voto

J'ai résolu le problème, dans mon cas nous sommes sur ActivityA a ActivityB puis vous voulez revenir à ActivityA de manière programmatique, voici mon code

ActivitéA :

String currentActivity;
void onCreate(...){
...
currentActivity = this.getClass().getName();
...
}

Puis sur votre intention (toujours dans ActivityA ) :

Intent intent = new Intent(this, ActivityA.class);
intent.putExtra("from", currentActivity);
startActivity(intent);
this.finish();

Maintenant sur l'activité B :

Class fromClass;
void onCreate(...){
...
String String from = getActivity().getIntent().getStringExtra("from");
try {
    fromClass = Class.forName(from);
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}
...
}

Puis sur votre intention (toujours dans ActivityB ) pour revenir à ActivityA :

Intent intent = new Intent(this, fromClass);
startActivity(intent);
this.finish();

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