19

Pracuję nad nadaniem aplikacji więcej materiału i po prostu utknąłem na tym, jak zaimplementować niektóre przejścia elementów współdzielonych. Mam działanie A, które uruchamia kolejne B, a następnie wywołuje metodę finish(), aby usunąć ją z tylnego stosu. W moim przypadku mam element, który chcę podzielić między dwie aktywności, ale po przejściu z punktu A do punktu B, A nie ma już znaczenia. Jeśli nie wywołasz metody finish() po uruchomieniu programu (ctx, intent, bundle), animacja exit/enter działa idealnie. Jednak jeśli zakończę połączenie, przed rozpoczęciem animacji pojawi się naprawdę brzydkie migotanie.Android - Przejścia dzielonego elementu z zakończeniem aktywności wywołania()

Czy jest coś, co przeoczyłem, czy po prostu nie można zrobić tego, co próbuję zrobić?

Odpowiedz

16

Możesz zakończyć swoją działalność w funkcji OnStop, jeśli tylko chcesz to się stało podczas przejścia z punktu A do punktu B, a następnie utworzyć flagę i ustawić go po wywołaniu startActivity (CTX, zamiar, wiązka):

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

Upewnij się, gdy skończysz z działalnością B zadzwonić wykończenie() i nie finishAfterTranstion(), ponieważ aktywność a nie ma już

Po zakończeniu aktywności a, wspólny element B może powiesić na ekranie, jeśli ciebie naciśnij z powrotem. Ustaw parametr transitionName na wartość null w ActivityB.onEnterAnimationComplete, aby tego uniknąć.

+0

To nie działa dla mnie, przejście do elementu współużytkowanego nie jest poprawne, gdy to robię. Wszystko jest w porządku, jeśli nie zakończę działania A, ale chcę to zrobić po zakończeniu przejścia. Nie mogę tego uruchomić. –

18

UPDATE

Dużo lepszy i prostszy sposób

ActivityCompat. finishAfterTransition(this); 

< 3 biblioteki wsparcie.

+2

Nie mogę znaleźć "finishWithTransition". Więc spróbowałem 'finishAfterTransition' i też nie działało. – guness

+0

Jego biblioteka pomocy. Spróbuj także wpaść na swoją wersję docelowąSDK – ksarmalkar

+0

Połączenie jest w rzeczywistości: ActivityCompat.finishAfterTransition (this); Właśnie testowane i działa świetnie. –

2

Wypróbuj Metoda finishAfterTransition() w wersji 5.0 lub nowszej można zakończyć działanie po wystąpieniu przejścia wyjścia.

2

Być może jest późno, ale miałem ten sam problem. Co pracował dla mnie jest:

supportFinishAfterTransition(); 

ten znajduje się w bibliotece wsparcia i działa jak czar.

PS: nie musisz dzwonić pod numer finish(), dzwoniąc pod numer supportFinishAfterTransition().

Powiązane problemy