使用add()而不是replace()进行片段共享元素转换?

44

我正在尝试在片段之间进行共享元素过渡,在使用replace()添加第二个片段时,一切都很正常,但是在代码库中经常使用add(),但是当使用它时,过渡只会跳到结束值

是否可能在添加的片段之间进行过渡呢? 谢谢

@Override
public void onClick(View v) {
    setSharedElementReturnTransition(TransitionInflater.from(getActivity())
        .inflateTransition(android.R.transition.move));

    FragmentB secondFragment = new FragmentB();
    secondFragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity())
        .inflateTransition(android.R.transition.move));

    getFragmentManager().beginTransaction()
        .add(R.id.container, secondFragment)
        .addToBackStack(null)
        .addSharedElement(imageView, imageView.getTransitionName())
        .commit();
}

你正在使用的另一个片段是子片段吗? - Neelay Srivastava
3个回答

6

试一下

getSupportFragmentManager().beginTransaction() 
                .addSharedElement(myImage, "mytransition") 
                .add(R.id.recycler_view_container, myFragment2) 
                .hide(myFragment1)  
                 commit(); 

对我很有帮助。


4

这个hack似乎适用于ImageViews,但如果视图本身是一个ViewGroup,则有点复杂。 - Rohit

0
尝试为 FragmentTransaction 添加 .detach() 方法。
    FragmentManager manager = activity.getSupportFragmentManager ();
    Fragment currentFragment = manager.findFragmentById (CONTAINER_ID); 
    int intoContainerId = currentFragment.getId ();
    manager.beginTransaction ()
            .setTransition (FragmentTransaction.TRANSIT_FRAGMENT_FADE)
            .addSharedElement(view, transitionName)
            .addToBackStack (withTag)
            .detach(currentFragment)
            .add(intoContainerId, newFragment, withTag)
            .commit();

这会使得视图在后台中消失,这破坏了添加片段而不是首先替换它的整个目的。 - Rohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接