У меня есть следующая структура: Основная активность -> ViewPager -> Фрагмент хоста + Фрагмент хоста 2
Фрагмент хоста -> сначала заменить на FirstFragment1 Фрагмент хоста 2 -> сначала заменить на FirstFagment2
Во Fragment1 у меня есть вид Recycler. Я сделал интерфейс прослушивателя щелчков для использования между адаптером рециркулятора и Fragment1, чтобы я мог создавать собственные стеки popback для каждой вкладки.
Метод popBackStack в каждом фрагменте хоста:
public boolean popBackStack() {
if(getChildFragmentManager().getBackStackEntryCount() > 0) {
getChildFragmentManager().popBackStack();
return true;
} else
return false;
}
Вот как я переопределить onBackPressed в Main Activity:
@Override
public void onBackPressed() {
if (viewPager.getCurrentItem() == 0) {
HostFragment fragment = ((HostFragment) mPagerController.getItem(0));
if (!fragment.popBackStack())
super.onBackPressed();
} else if (viewPager.getCurrentItem() == 1) {
HostFragment2 fragment = ((HostFragment2) mPagerController.getItem(1));
if (!fragment.popBackStack())
super.onBackPressed();
} else
super.onBackPressed();
}
Это onClick, переопределенный из интерфейса во Fragment1:
@Override
public void onImageClick(int position, View itemView) {
ImageView image1 = itemView.findViewById(R.id.picPost);
Bundle bundle = new Bundle();
ExampleFeed exampleFeed = exampleFeedArrayList.get(position);
bundle.putInt("postimage", exampleFeed.getPostpic());
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
Fragment2 fragment2 = Fragment2.newInstance();
setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform));
setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));
fragment2.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform));
fragment2.setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform));
fragment2.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.slide_bottom));
fragment2.setArguments(bundle);
transaction
.addSharedElement(tv_time, timeTransitionName)
.replace(R.id.frame_container, fragment2)
.addToBackStack(null)
.commit();
}
Анимации общего элемента работают, когда я щелкаю изображение в представлении рециркулятора и откройте Fragment2, но когда я нажимаю назад, они больше не работают, и это всего лишь анимация slide_bottom из setEnterTransition для всего фрагмента.
Что может вызвать эту проблему? Большое спасибо!
ОБНОВЛЕНИЕ: Я обнаружил, что проблема setSharedElementReturnTransition
. Это ничего не делает. Даже если я удаляю его, он делает то же самое