Android 动画嵌套片段

Posted

技术标签:

【中文标题】Android 动画嵌套片段【英文标题】:Android animated nested fragments 【发布时间】:2016-11-26 16:28:20 【问题描述】:

我有一个活动,里面有一个片段 A。片段 A 在其中嵌套了片段 B。我正在使用以下代码将 B 与 C 切换:

            getChildFragmentManager()
                .beginTransaction()
                .setCustomAnimations(R.anim.move_left_in, R.anim.move_left_out,R.anim.move_right_in, R.anim.move_right_out)
                .replace(R.id.container, fragmentC)
                .addToBackStack("nested")
                .commit();

在那之后我在做

        getChildFragmentManager().popBackStack();

是什么让我回到了片段 B。 之后,我使用代码将片段 A 与片段 D 切换

        getSupportFragmentManager()
            .beginTransaction()
            .setCustomAnimations(R.anim.move_up_in, R.anim.move_up_out, R.anim.move_down_in, R.anim.move_down_out)
            .replace(R.id.fragment_holder, fragmentD)
            .addToBackStack("fragments")
            .commit();

当播放 A->D 事务的动画时,B 播放事务 C->B 的动画,并且通过弹出回栈得到相同的结果,为什么?

【问题讨论】:

你使用什么支持库版本? 我没有得到你真正想要的东西。您能否详细说明这部分,“当播放 A->D 交易的动画时,B 播放交易 C->B 的动画,并且通过弹出回栈我得到相同的结果,为什么?”?跨度> 【参考方案1】:

当您将片段 A 与片段 D 切换时。

片段 A 中的内容与其父片段分离,然后发生事务 A -> D,

由于您已经为片段设置了动画,因此这些动画导致的延迟是您的原因,请先查看 B 中遗漏的动画, 然后是 A -> D 动画。

【讨论】:

【参考方案2】:

不要使用 getChildFragmentManager(),

使用支持fragmnetManager意味着为什么使用getSupportFragmentManager?

嵌套片段的Bcz

我希望您的问题可以通过此解决方案得到解决。谢谢:)

【讨论】:

因为我在使用片段制作动画时也遇到了这个问题,所以,我只是将它从子管理器更改为支持管理器,这样之后我就得到了我想要的结果。跨度> 你可以在这里查看developer.android.com/reference/android/app/… 那么生命周期呢?如果您旋转设备怎么办,片段内的片段是否正确重新创建? 你可以检查这个,***.com/questions/8474104/…

以上是关于Android 动画嵌套片段的主要内容,如果未能解决你的问题,请参考以下文章

Android:将“ViewPager”动画从片段更改为片段

带有嵌套/子片段的 Android Backstack

Android使用片段在viewpager中的页面滚动上放置动画

Android TV(leanback)中的持久标头片段(禁用动画)

java 将循环显示和不显示过渡动画添加到Android片段

不使用支持库的 Android 4.0、4.1 (<4.2) 中嵌套片段的最佳实践