Я создаю приложение, где в основном фрагменте есть viewPager с фрагментами с recyclerView. Каждый элемент recyclerView имеет изображение, которое необходимо сделать общим для фрагмента детализации с анимацией. Проблема в том, что это не работает. Я попытался сделать это без viewPager, используя только один фрагмент с recyclerView, и он работает хорошо. Какая разница в реализации перехода разделяемых элементов в viewPager и без него?
В адаптере я устанавливаю transitionName
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
holder.movieImage.setTransitionName("transition" + position);
}
В действии я показываю фрагмент детали:
public void showFragmentWithTransition(Fragment current, Fragment newFragment, String tag, View sharedView, String sharedElementName) {
FragmentManager fragmentManager = getSupportFragmentManager();
// check if the fragment is in back stack
boolean fragmentPopped = fragmentManager.popBackStackImmediate(tag, 0);
if (fragmentPopped) {
// fragment is pop from backStack
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
current.setSharedElementReturnTransition(TransitionInflater.from(this).inflateTransition(R.transition.default_transition));
current.setExitTransition(TransitionInflater.from(this).inflateTransition(android.R.transition.no_transition));
newFragment.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.default_transition));
newFragment.setEnterTransition(TransitionInflater.from(this).inflateTransition(android.R.transition.no_transition));
}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, newFragment, tag);
fragmentTransaction.addToBackStack(tag);
fragmentTransaction.addSharedElement(sharedView, sharedElementName);
fragmentTransaction.commit();
}
}
В подробном фрагменте я получаю такие аргументы:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle arguments = getArguments();
if (arguments != null) {
String transitionName = arguments.getString("transitionName");
Movie movie = (Movie) arguments.getSerializable("movie");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
movieImage.setTransitionName(transitionName);
}
if (movie != null) {
if (!TextUtils.isEmpty(movie.getImage()))
Picasso.with(getActivity()).load("https://i.ytimg.com/vi/qh7LLydY8eo/maxresdefault.jpg").into(movieImage);
else
movieImage.setImageDrawable(null);
}
}
}