2017-10-24 33 views
0

Ich habe eine Aktivität mit View-Pager mit drei Fragmente. Ich startete ein weiteres Top-Fragment mit einem View-Pager mit Fragmenten darin. Alles ist in Ordnung und es gelingt mir, all dies zu tun. Aber wenn ich addSharedElement für den gemeinsamen Übergang von Fragment zu Fragment verwende, passiert überhaupt keine Animation. Ich ersetze Fragment mit neuem Top-Fragmente wie unten:Shared-Transition-Fragment zu Fragment funktioniert nicht

View transitionView = view.findViewById(R.id.photo_image_view); 
     fragmentManager 
       .beginTransaction() 
       .replace(R.id.fragment_container, fragment) 
       .addToBackStack(null) 
       .addSharedElement(transitionView, ViewCompat.getTransitionName(transitionView)) 
       .commit(); 

und in meinem nächsten Fragmente onCreate ich tat:

public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getActivity() != null) { 
     getActivity().supportPostponeEnterTransition(); 
    } 
    } 

dann in onCreateView ich ein anderes viewpager mit Fragmente implementieren. Ansicht Pager Nach der Implementierung, Das Fragment ich möchte ich zeigen, tat

 desiredFragmentToShow.setSharedElementEnterTransition(TransitionInflater.from(

    getActivity()).inflateTransition(R.transition.change_image_trans)); 

    desiredFragmentToShow.setEnterTransition(TransitionInflater.from(

    getActivity()).inflateTransition(android.R.transition.fade)); 

und in desiredFragmentToShow in onViewCreated ich getan habe:

activity.supportStartPostponedEnterTransition(); 

aber es gibt überhaupt keine Animation. Bitte helfen Sie, wenn ein Körper eine Idee hat.

+0

Also, wenn Sie geteilte Elemente zwischen Fragmenten verwenden, warum erhalten Sie die Aktivität beteiligt? Zum Beispiel rufen Sie 'getActivity() auf. SupportPostponeEnterTransition(); 'sollte' postponeEnterTransition();' etc sein. –

+0

@Mark Keen Ich habe 'postponeEnterTransition();' in 'onCreate()' des nächsten Containerfragments des Ansichtspagers und 'startPostponedEnterTransition();' Im Fragment-Innenansicht-Pager wird das Standbild-in-Sicht-Pager-Fragment überhaupt nicht animiert. –

+0

@WakilAhmad haben Sie das Problem erfolgreich gelöst? –

Antwort

0

Leider ist meine Antwort in Kotlin aber ich glaube, es ist keine große Sache

ich gefunden habe, dass startPostponedEnterTransition() in onViewCreated Aufruf zu spät ist.

ViewPager Fragment

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    val transition = TransitionInflater 
     .from(context) 
     .inflateTransition(R.transition.change_image_trans) 
    sharedElementEnterTransition = transition 
    /* The return transition probably should be set here as well on the way back 
     but I havent't try that yet so I nullify it... */ 
    sharedElementReturnTransition = null 
    postponeEnterTransition() 
    // ... your code 
} 

Seite Fragment

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    startPostponedEnterTransition() 
} 

und das funktioniert ...

Leider, wenn Sie einen Zuhörer auf den Übergang setzen wollen es funktioniert nur, wenn Sie es definieren in der ViewPager, weil in der Page Fragment, wenn Sie Listener auf den Casted gemeinsame Übergang eingestellt ist, wird es nicht ausgelöst.

val transition = parentFragment!!.sharedElementEnterTransition 
+0

Ich habe bereits Aufruf aufgeschoben in erstellen. –

+0

Ich verstehe. Wenn Sie es im 'Page Fragment' anstatt im' ViewPager Fragment' platzieren, könnte das der Grund sein. Wie auch immer, wenn du die Schritte, die ich geteilt habe, befolgst, bin ich mir sicher, dass du den Übergang bekommen wirst, viel Glück –

Verwandte Themen