0

在一个片段中AppCompatActivity带有一个( ),依此类推,所以如果我单击一个项目,那么将显示并显示该项目的详细信息。在这个阶段,我想在两个具有共享元素的片段之间创建一个动画。 重现行为的步骤:RecyclerViewmyFragment1viewholdersmyFragment2

import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
[...]
public class AppActivity extends AppCompatActivity

myFragment1.setSharedElementReturnTransition(new MyNewTransition());
myFragment1.setSharedElementEnterTransition(new MyNewTransition());
[...]
a) getSupportFragmentManager().beginTransaction()
                    .addSharedElement(myImage, "mytransition")
                    .replace(R.id.recycler_view_container, myFragment2)
                    .commit();

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

在(a)代码中,图像转换是正确的,并且动画在共享元素之间完美地发生,但我不需要这个。在 (b) 代码中,唯一的区别是myFragment1被隐藏和myFragment2被添加,在这种情况下,进入过渡和返回过渡都被破坏并且没有动画发生。
我需要(b)代码,因为“替换”片段会破坏myFragment1和重建它是一个繁重的过程。我认为这是 androidx 库的错误

编辑:我已经根据 Bryan Herbst:
FragmentTransitionSample 的演示构建了一个示例,并重新适应了 androidx,这里是来源。

4

1 回答 1

3

尝试添加setReorderingAllowed(true)

例如:

getSupportFragmentManager().beginTransaction() 
                .setReorderingAllowed(true)
                .addSharedElement(myImage, "mytransition") 
                .add(R.id.recycler_view_container, myFragment2) 
                .hide(myFragment1)  
                 commit(); 
于 2019-01-01T03:50:54.703 回答