Мое приложение содержит представление, состоящее из ViewPager, состоящего из нескольких фрагментов. Когда вы нажимаете на элемент в одном из этих фрагментов, ожидаемое поведение для общего элемента (в данном случае изображения) для перехода к фрагменту, который отображает больше информации о кликнутом контенте.
Вот очень простое видео о том, как оно должно выглядеть:
https://dl.dropboxusercontent.com/u/97787025/device-2015-06-03-114842.mp4
Это просто использование перехода фрагмента → фрагмента.
Проблема возникает при размещении исходного фрагмента внутри ViewPager. Я подозреваю, что это связано с тем, что ViewPager использует дочерний менеджер фрагментов родительского фрагмента, который отличается от диспетчера фрагментов активности, который обрабатывает транзакцию фрагмента. Вот видео о том, что происходит:
https://dl.dropboxusercontent.com/u/97787025/device-2015-06-03-120029.mp4
Я почти уверен, что проблема здесь, как я объяснил выше, - это менеджер дочерних фрагментов и менеджер фрагментов активности. Вот как я делаю переход:
SimpleFragment fragment = new SimpleFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.am_list_pane, fragment, fragment.getClass().getSimpleName());
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
TransitionSet enterTransition = new TransitionSet();
enterTransition.addTransition(new ChangeBounds());
enterTransition.addTransition(new ChangeClipBounds());
enterTransition.addTransition(new ChangeImageTransform());
enterTransition.addTransition(new ChangeTransform());
TransitionSet returnTransition = new TransitionSet();
returnTransition.addTransition(new ChangeBounds());
returnTransition.addTransition(new ChangeClipBounds());
returnTransition.addTransition(new ChangeImageTransform());
returnTransition.addTransition(new ChangeTransform());
fragment.setSharedElementEnterTransition(enterTransition);
fragment.setSharedElementReturnTransition(returnTransition);
transaction.addSharedElement(iv, iv.getTransitionName());
}
transaction.addToBackStack(fragment.getClass().getName());
transaction.commit();
Это отлично работает, когда оба фрагмента управляются менеджером фрагментов активности, но когда я загружаю ViewPager следующим образом:
ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
pager.setAdapter(new Adapter(getChildFragmentManager()));
Дети ViewPager не управляются действием, и он больше не работает.
Это надзор со стороны команды Android? Есть ли способ снять это? Спасибо.