19

Sto lavorando per rendere un'applicazione più materiale e sono solo bloccato su come implementare alcune transizioni di elementi condivise. Ho un'attività A che avvia un'altra B e poi chiama finish() per rimuoverla dal back stack. Nel mio caso ho un elemento che voglio condividere tra le due attività, ma una volta passato da A a B, A non conta più. Se non chiamo finish() dopo startActivity (ctx, intent, bundle) l'animazione exit/enter funziona perfettamente. Tuttavia, se io chiamo finish, c'è uno sfarfallio davvero brutto prima che inizi l'animazione.Android - Transizioni elemento condiviso con attività di chiamata finish()

C'è qualcosa che sto trascurando o è semplicemente impossibile fare ciò che sto cercando di fare?

risposta

16

Si può terminare la vostra attività nella funzione onStop, se desideri solo che questo accada quando la transizione da A a B quindi creare una bandiera e impostarlo dopo la chiamata startActivity (CTX, intento, bundle):

@Override 
public void onStop() { 
    super.onStop(); 
    if(mShouldFinish) 
     finish(); 
} 

assicurarsi quando si è fatto con l'attività B per chiamare finitura() e non finishAfterTranstion(), in quanto l'attività a non è più lì

Dopo aver terminato l'attività a, elemento condiviso in B potrebbe bloccarsi a schermo, se si premere indietro. Impostare transitionName su null in ActivityB.onEnterAnimationComplete per evitare questo.

+0

Questo non funziona per me, la transizione dell'elemento condiviso non è corretta quando faccio questo. Va tutto bene se non termino l'attività A ma voglio farlo dopo che la transizione è terminata. Non riesco a farlo funzionare. –

18

UPDATE

molto meglio e più semplice modo

ActivityCompat. finishAfterTransition(this); 

< 3 libreria di supporto.

+2

Non riesco a trovare 'finishWithTransition'. Così ho provato "finishAfterTransition" e non ho funzionato neanche. – guness

+0

È nella libreria di supporto. Prova anche a urtare la tua versione targetDDK – ksarmalkar

+0

La chiamata è in realtà: ActivityCompat.finishAfterTransition (this); Appena testato e funziona benissimo. –

2

Provare il metodo finishAfterTransition() in 5.0 e versioni successive è possibile terminare l'attività dopo la transizione di uscita.

2

Forse è tardi, ma ho avuto lo stesso problema. Che cosa ha funzionato per me è:

supportFinishAfterTransition(); 

questo è incluso nella libreria di supporto e funziona come fascino.

PS: non è necessario chiamare finish() quando si chiama supportFinishAfterTransition().

Problemi correlati