使用片段共享转换时,返回转换无法正常工作

我有2个片段ListMovieFragmentListMovieFragment

我有一个在MainActivity实现的ListMovieFragment中的接口。 我正在使用共享元素转换; 当我点击ListMovieFragment的图像视图时,在MainActivity调用onMovieSelected

ListMovieFragment转换工作。
但是当我点击后退button时,从DetailMovieFragment转换到ListMovieFragment失败。

什么是错误的gif

这是MainActivity。 我想我得到了一个不正确的组合来设置片段的转换。

 public class MainActivity extends AppCompatActivity implements ListMovieFragment.MovieSelectedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState == null) { ListMovieFragment listMovieFragment = new ListMovieFragment(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.activity_main, listMovieFragment, ListMovieFragment.TAG); fragmentTransaction.commit(); } } @Override public void onMovieSelected(int movieId) { DetailMovieFragment detailMovieFragment = (DetailMovieFragment)getSupportFragmentManager().findFragmentByTag(DetailMovieFragment.TAG); /* Create a new DetailMovieFragment if not exits */ if(detailMovieFragment == null) { detailMovieFragment = new DetailMovieFragment(); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { /* Get the fragments that will be using the transition */ ListMovieFragment listMovieFragment = (ListMovieFragment)getSupportFragmentManager().findFragmentByTag(ListMovieFragment.TAG); if(listMovieFragment == null) { listMovieFragment = new ListMovieFragment(); } /* Inflate the transition */ Transition changeTransition = TransitionInflater .from(MainActivity.this) .inflateTransition(R.transition.change_image_transform); /* source fragment (ListMovieFragment) */ listMovieFragment.setExitTransition(new Explode()); listMovieFragment.setSharedElementReturnTransition(changeTransition); /* Destination fragment (DetailMovieFragment) */ detailMovieFragment.setSharedElementEnterTransition(changeTransition); detailMovieFragment.setEnterTransition(new Explode()); /* Get the shared imageview from the source fragment (MovieListFragment) */ final ImageView ivSharedImage = (ImageView) findViewById(R.id.ivMoviePoster); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.activity_main, detailMovieFragment, DetailMovieFragment.TAG); fragmentTransaction.addToBackStack(DetailMovieFragment.TAG); fragmentTransaction.addSharedElement(ivSharedImage, getResources().getString(R.string.transition_poster_image)); fragmentTransaction.commit(); } else { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.activity_main, detailMovieFragment, DetailMovieFragment.TAG); fragmentTransaction.addToBackStack(DetailMovieFragment.TAG); fragmentTransaction.commit(); } } @Override public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStack(); } else { super.onBackPressed(); } } } 

我的转换XML文件:

 <transitionSet> <changeBounds /> </transitionSet> 

fragment_list

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="18dp" android:paddingBottom="6dp"> <ImageView android:id="@+id/ivMoviePoster" android:layout_width="184dp" android:layout_height="276dp" android:adjustViewBounds="true" android:scaleType="fitXY" android:transitionName="@string/transition_poster_image"/> </LinearLayout> 

fragment_detail

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="me.androidbox.fragmenttransitions.detail.DetailMovieFragment"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="The Movie App" android:textSize="28sp" android:fontFamily="sans-serif-light" android:textColor="@android:color/holo_blue_dark"/> <ImageView android:id="@+id/ivMoviePoster" android:layout_width="92dp" android:layout_height="138dp" android:layout_marginEnd="16dp" android:layout_marginTop="112dp" android:adjustViewBounds="true" android:scaleType="fitXY" android:layout_gravity="end" android:transitionName="@string/transition_poster_image"/> </FrameLayout> 

activity_main

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="me.androidbox.fragmenttransitions.activity.MainActivity"> </FrameLayout> 

Related of "使用片段共享转换时,返回转换无法正常工作"

你应该改变如下所示的fragment_list.xmlandroid:layout_width/height属性被改变。

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="18dp" android:paddingBottom="6dp"> <ImageView android:id="@+id/ivMoviePoster" android:layout_width="184dp" android:layout_height="276dp" android:adjustViewBounds="true" android:scaleType="fitXY" android:transitionName="@string/transition_poster_image"/> </LinearLayout>