web-dev-qa-db-fra.com

overridePendingTransition ne fonctionne pas lorsque FLAG_ACTIVITY_REORDER_TO_FRONT est utilisé

J'ai deux activités dans la pile, afin de leur montrer que j'utilise FLAG_ACTIVITY_REORDER_TO_FRONT. Jusqu'ici tout va bien, le problème survient lorsque je veux apporter l'activité avec une animation en utilisant overridePendingTransition.

Intent i = new Intent(ActivityA.this, ActivityB.class);
i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
ActivityA.this.startActivity(i);
overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left);

La transition n'est pas affichée, cependant, si l'indicateur n'est pas ajouté à l'intention (suppression de la ligne 2), il n'y a pas de problème.

Est-il possible de mettre en avant une activité avec une animation?

Merci beaucoup!

27
Daniel

En fait, la bonne solution lors de l'utilisation de REORDER_TO_FRONT est d'appeler overridePendingTransition dans la méthode onNewIntent () de l'activité que vous allez ouvrir.

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    overridePendingTransition(Android.R.anim.fade_in, Android.R.anim.fade_out);
}

remplacer par vos transitions.

Si vous devez remplacer la transition de manière sélective, vous pouvez ajouter un supplément dans votre intention et la vérifier dans onNewIntent () pour décider quoi faire.

Cela ne convient pas si vous ne connaissez pas la transition qui sera ouverte (si vous ne la spécifiez pas explicitement par exemple) mais sinon c'est la bonne solution.

38
Daniele Segato

J'ai rencontré ce même problème. L'astuce consiste à remplacer la transition dans le rappel onResume ().

@Override
public void onResume() {
    super.onResume();
    overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left);
}
34
bradley4

pour moi, la solution était de s'assurer qu'il s'exécute dans le thread d'interface utilisateur

runOnUiThread(new Runnable() {
            public void run() {
                startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
                overridePendingTransition(Android.R.anim.fade_in, Android.R.anim.fade_out);
            }
        });

        finish();
4
K-RAD

Appel

overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left);

après l'arrivée (); de l'activité de clôture a fonctionné pour moi.

finish();
overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left);

C'est mieux que d'appeler sur Resume, car cela rend l'activité plus indépendante des animations d'entrée et de sortie:


Appel après la fin de l'activité de l'expéditeur:

Activité A --- Entrez la transition 1 (sur A) ---> Activité B --- Entrez la transition 2 (sur B) ---> Activité C

Activité A <--- Sortie Transition 1 (sur B) --- Activité B <--- Sortie Transition 2 (sur C) --- Activité C

Activité A --- Entrez la transition 1 (sur A) ---> Activité C --- Entrez la transition 3 (sur C) ---> Activité B

Activité A <--- Sortie Transition 3 (sur C) --- Activité C <--- Sortie Transition 2 (sur B) --- Activité B



Appel en cours Reprise de l'activité du récepteur:

Activité A --- Entrez la transition 1 (sur B) ---> Activité B --- Entrez la transition 2 (sur C) ---> Activité C

Activité A <--- Entrez la transition 1 (sur A) --- Activité B <--- Entrez la transition 2 (sur B) --- Activité C

Activité A --- Entrez la transition 3 (sur C) ---> Activité C --- Entrez la transition 2 (sur B) ---> Activité B

Activité A <--- Entrez la transition 1 (sur A) --- Activité C <--- Entrez la transition 3 (sur C) --- Activité B

Ici, l'animation onResume doit toujours être la même, quelle que soit l'activité de l'expéditeur, c'est la première approche, où vous pouvez facilement personnaliser l'animation.

2
Leonardo Cardoso

J'ai le même problème. Je vous suggère de vérifier votre AndroidManifest.xml pour vous assurer que ActivityA et ActivityB n'ont pas de jeu Theme.Translucent.NoTitleBar, ce thème contient "Android: windowIsTranslucent" = true cause le problème.

J'espère que cela vous aidera.

2
huangxin

Mon collègue a rencontré ce problème et il a réussi à le résoudre en y ajoutant l'attribut SDK minimum (5 et plus).

puisque cette fonctionnalité était disponible depuis l'api 5, imposer l'utilisation d'un niveau sdk supérieur a fait l'affaire pour nous.

1
Royi Benyossef

Que diriez-vous de créer une animation dans onCreate () ou onStart () de la deuxième activité.

0
GSree