相关疑难解决方法(0)

片段共享元素转换不适用于ViewPager

我的应用程序包含一个视图,其中包含一个由少量片段组成的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();
Run Code Online (Sandbox Code Playgroud)

当两个片段都由活动的片段管理器管理时,这种方法很好,但是当我加载一个像这样的ViewPager时:

ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
pager.setAdapter(new Adapter(getChildFragmentManager()));
Run Code Online (Sandbox Code Playgroud)

ViewPager的子项不是由活动管理的,它不再起作用.

这是Android团队的疏忽吗?有什么办法可以解决这个问题吗?谢谢.

android android-viewpager android-transitions

52
推荐指数
1
解决办法
1万
查看次数