Domanda

Sto avendo problemi con l'uso o la comprensione di come popping FragmentTransactions al largo della pila posteriore gestisce l'usanza animazioni. In particolare, mi aspetto che per chiamare l'animazione "fuori", ma essa non sembra.

Ho un metodo semplice per gestire una transazione frammento (FragmentTransaction) in cui aggiungo un frammento e applicare un personalizzato transizione in modo che possa fade-in / fade-out. Sono anche l'aggiunta di questa a lo stack indietro in modo che l'utente può annullare tale operazione con il tasto posteriore, sostanzialmente navigazione allo stato precedente il frammento è stato aggiunto.

protected void changeFragment() { 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 
    ft.add(R.id.fragment_container, new TestFragment()); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

Tutto funziona alla grande movimento in avanti, ma quando l'utente fa clic tasto posteriore, le animazioni di transizione non si invertono. Quello che mi aspettavo era che quando il frammento ottenuto rimosso, sarebbe utilizzare il fuori dissolvenza animazione. Invece sembra saltar fuori (senza animazione) e poi il contenitore sembra svanire. Io non sono sicuro che questo è esattamente ciò che sta accadendo, ma il frammento non è assolutamente svanendo.

La mia applicazione utilizza la libreria di compatibilità per aggiungere il supporto frammento, ma suppongo questa sia applicabile a nido d'ape (android-11) pure. Qualcuno sa se sto solo facendo qualcosa di sbagliato qui o se sono appena mi aspettavo troppo? Idealmente, vorrei animare la frammenti analogamente a come Gmail (sul Xoom) fa riferimento a andare avanti facendo clic su un messaggio e poi di nuovo utilizzando la parte posteriore pulsante. Preferibilmente non dover sostituire il pulsante Indietro funzionalità e tenere il passo con il mio stato frammento da quando ho potuto avere diverse "operazioni" che vorrei fare marcia indietro su e io sono non è un fan di ruote re-inventare.

ha chiesto anche sulla Developers Group Android: http://groups.google.com/group / android-sviluppatori / browse_thread / thread / 1136a3a70fa0b6e9

È stato utile?

Soluzione

Il bug è stato risolto nella versione 3.2 con l'aggiunta del seguente nuovo api:

http: // sviluppatore. android.com/reference/android/app/FragmentTransaction.html#setCustomAnimations(int, int, int, int)

E 'da notare che non è ancora stata back-porting alla libreria di compatibilità (come menzionato nella relazione di bug).

Altri suggerimenti

Io uso questo:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);

e le transizioni funzionano al contrario quando il pulsante posteriore è presse.

E 'un bug, un'occhiata a segnalazione di bug 15623 . Uno dei membri del progetto Android ha commentato che la correzione era troppo tardi per il rilascio 3.1 ma dovrebbe riuscire ad entrare nella prossima release.

Lo stesso membro continua a dire che ...

Il problema è che lo stesso le animazioni sono eseguiti su un'operazione pop come sono stati eseguiti per mettere i frammenti i loro posti attuali. Ad esempio, in Nell'esempio sopra scorrevole, su una funzionamento in avanti (spingendo il vecchio frammento sulla pila e spostando la nuovo frammento in vista), scivoliamo la vecchio frammento fuori dal centro di sinistra e far scorrere il nuovo frammento da destra verso il centro. Quando il pila viene estratto, queste stesse animazioni vengono eseguiti: il frammento più recente è animato 'fuori' facendolo scorrere in da il diritto al centro (dopo il quale scompare, dal momento che è l'essere rimosso). Il vecchio frammento è spuntato dallo stack e animato da teh centro alla sinistra ... destra fuori del schermo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top