2020
2121import android .os .Bundle ;
2222import androidx .fragment .app .Fragment ;
23+ import androidx .fragment .app .FragmentTransaction ;
2324import android .view .LayoutInflater ;
2425import android .view .View ;
2526import android .view .ViewGroup ;
26- import androidx .activity .OnBackPressedCallback ;
2727import androidx .annotation .LayoutRes ;
2828import androidx .annotation .NonNull ;
2929import androidx .annotation .Nullable ;
30+ import androidx .transition .Transition ;
31+ import androidx .transition .TransitionListenerAdapter ;
3032import com .google .android .material .transition .MaterialSharedAxis ;
3133import io .material .catalog .feature .DemoFragment ;
3234
@@ -36,14 +38,6 @@ public class TransitionSharedAxisDemoFragment extends DemoFragment {
3638 private static final int LAYOUT_RES_ID_START = R .layout .cat_transition_shared_axis_start ;
3739 private static final int LAYOUT_RES_ID_END = R .layout .cat_transition_shared_axis_end ;
3840
39- private final OnBackPressedCallback onBackPressedCallback =
40- new OnBackPressedCallback (/* enabled= */ false ) {
41- @ Override
42- public void handleOnBackPressed () {
43- replaceFragment (LAYOUT_RES_ID_START );
44- }
45- };
46-
4741 private SharedAxisHelper sharedAxisHelper ;
4842
4943 @ Override
@@ -58,12 +52,18 @@ public View onCreateDemoView(
5852 @ Override
5953 public void onViewCreated (@ NonNull View view , @ Nullable Bundle bundle ) {
6054 sharedAxisHelper = new SharedAxisHelper (view .findViewById (R .id .controls_layout ));
61- requireActivity ().getOnBackPressedDispatcher ().addCallback (this , onBackPressedCallback );
6255
63- replaceFragment (LAYOUT_RES_ID_START );
56+ Fragment fragment = TransitionSimpleLayoutFragment .newInstance (LAYOUT_RES_ID_START );
57+
58+ requireActivity ()
59+ .getSupportFragmentManager ()
60+ .beginTransaction ()
61+ .replace (R .id .fragment_container , fragment )
62+ .commit ();
6463
6564 sharedAxisHelper .setBackButtonOnClickListener (v -> replaceFragment (LAYOUT_RES_ID_START ));
6665 sharedAxisHelper .setNextButtonOnClickListener (v -> replaceFragment (LAYOUT_RES_ID_END ));
66+ sharedAxisHelper .updateButtonsEnabled (true );
6767 }
6868
6969 private void replaceFragment (@ LayoutRes int layoutResId ) {
@@ -73,14 +73,28 @@ private void replaceFragment(@LayoutRes int layoutResId) {
7373 // Set the transition as the Fragment's enter transition. This will be used when the fragment
7474 // is added to the container and re-used when the fragment is removed from the container.
7575 fragment .setEnterTransition (createTransition (entering ));
76+ if (entering ) {
77+ fragment .setReturnTransition (createTransition (false ));
78+ } else {
79+ // Pop the backstack if manually transitioning to the start fragment to remove the end
80+ // fragment from the back stack without a back event.
81+ requireActivity ().getSupportFragmentManager ().popBackStack ();
82+ }
83+
84+ getFragmentTransaction (fragment , entering ).commit ();
85+ }
7686
77- getChildFragmentManager ()
78- .beginTransaction ()
79- .replace (R .id .fragment_container , fragment )
80- .commit ();
87+ private FragmentTransaction getFragmentTransaction (@ NonNull Fragment fragment , boolean entering ) {
88+ return entering
89+ ? getFragmentTransaction (fragment ).addToBackStack (/* name= */ null )
90+ : getFragmentTransaction (fragment );
91+ }
8192
82- sharedAxisHelper .updateButtonsEnabled (!entering );
83- onBackPressedCallback .setEnabled (entering );
93+ private FragmentTransaction getFragmentTransaction (@ NonNull Fragment fragment ) {
94+ return requireActivity ()
95+ .getSupportFragmentManager ()
96+ .beginTransaction ()
97+ .replace (R .id .fragment_container , fragment );
8498 }
8599
86100 private MaterialSharedAxis createTransition (boolean entering ) {
@@ -92,6 +106,18 @@ private MaterialSharedAxis createTransition(boolean entering) {
92106 // Fragment's layout.
93107 transition .addTarget (R .id .start_root );
94108 transition .addTarget (R .id .end_root );
109+ transition .addListener (
110+ new TransitionListenerAdapter () {
111+ @ Override
112+ public void onTransitionStart (@ NonNull Transition transition ) {
113+ sharedAxisHelper .updateButtonsEnabled (!entering );
114+ }
115+
116+ @ Override
117+ public void onTransitionCancel (@ NonNull Transition transition ) {
118+ sharedAxisHelper .updateButtonsEnabled (entering );
119+ }
120+ });
95121
96122 return transition ;
97123 }
0 commit comments