当前位置: 首页 > 知识库问答 >
问题:

片断popbackstack动画不工作

艾谦
2023-03-14

我在我的支持FragmentTransaction上使用了setCustomAnimations,但当我执行addToBackStack时,它所做的只是动画,而当我执行popBackStack时,它只是在没有动画的情况下消失。

下面是我的一段代码:

private void fragmentAppear(){
    fragment = new LoginFragment();
    fragmentManager = LoginActivity.this.getSupportFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction();
    //my XML anim files
    fragmentTransaction.setCustomAnimations(R.anim.slide_in_bottom,0,0,R.anim.slide_out_bottom);
    fragmentTransaction.replace(R.id.login_fragment, fragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

private void fragmentDisappear(){
    getSupportFragmentManager().popBackStack();
}

在setCustomAnimations部分,我使用了4个参数,到目前为止,它只在我调用FragmentAccount时显示幻灯片前的淡出动画,而在调用FragmentExcount时从不显示。我已经尝试过用很多很多不同的方式对参数进行排序,我也尝试过使用setCustomAnimations的两个param版本,它所做的只是在片段出现时进行动画化。

我正在为我的片段使用Android.support.v4.app库。

编辑:同样,如果不调用FragmentDiscount(碎片消失),按下后退按钮时动画也不会显示。

过去的代码在活动中,我试图从片段执行一个popBackStack,但它也不起作用。关闭我的碎片是正确的方法吗?

slide_in_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="75%p"
        android:toYDelta="0%p"
        android:fillAfter="true"
        android:duration="400" />
</set>

slide_out_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="0%p"
        android:toYDelta="75%p"
        android:fillAfter="true"
        android:duration="400" />
</set>

共有1个答案

夹谷飞龙
2023-03-14

如果您查看代码,您正在用一个新的片段替换该片段,但实际上设置了add to back stack null。为每个片段提供一个标记是很好的实践,甚至可以很容易地通过标记找到片段。将标记添加到片段中,如下所示。如果它仍然不起作用,那么问题将出现在动画xml文件中。

private void fragmentAppear(){
   fragment = new LoginFragment();
   fragmentManager = LoginActivity.this.getSupportFragmentManager();
   fragmentTransaction = fragmentManager.beginTransaction();
   //my XML anim files
   fragmentTransaction.setCustomAnimations(
        R.anim.slide_in_bottom,0,0,R.anim.slide_out_bottom);
   fragmentTransaction.replace(
        R.id.login_fragment, fragment, "loginFragment");
   fragmentTransaction.addToBackStack("loginFragment");
   fragmentTransaction.commit();
}

从片段事务文档中,我看到了这个函数,在那里您必须指定适当的动画。

/**
 * Set specific animation resources to run for the fragments that are
 * entering and exiting in this transaction. The
 * <code>popEnter</code>
 * and <code>popExit</code> animations will be played for enter/exit
 * operations specifically when popping the back stack.
 */
 public abstract FragmentTransaction setCustomAnimations(@AnimRes int enter,
        @AnimRes int exit, @AnimRes int popEnter, @AnimRes int popExit);
  1. Enter=>片断输入时的动画
  2. 退出=>片段退出时的动画。
  3. popenter=>片段从后堆栈进入时的动画。
  4. popexit=>从后堆栈弹出时片段退出时的动画。
 类似资料:
  • 我正在使用此代码来清理我的背包到我的主视图: 我很确定这段代码以前是有效的,但现在backstack计数没有改变,没有片段被删除,这会导致内存不足异常,因为while循环一直在运行。 有人知道它是否有问题,或者最新版本的SDK工具中是否有bug吗。我不知道是什么导致了这个问题。

  • 我尝试创建一个CSS动画,当你悬停在方框上时,它会显示使用CSS动画的div。我使用了以下站点作为参考。点击这里,但我似乎无法实现EFX。在我的站点上,我使用JqUERY实现了一个show and hide函数,我的addClass和RemoveClass可以正常工作,但总体来说,该函数并没有正常工作。有人能指引我正确的方向吗。 /**HTML**/ /*jquery**/ /**CSS动画**/

  • 我对片段有问题,或者更确切地说是我希望它们工作的方式有问题。 在我的活动中,我有一个布局容器(R.id.container1),我在启动时以编程方式向其中添加一个片段(FragMain)。在片段中,我有2个片段(Frag1、Frag2)和一个ViewPager,它通过FragmentPagerAdapter加载其他几个片段(FragA、FragB、FragC、FragD、FragE)。 按下一个按

  • 这似乎是一个具有挑战性的动画,但我有一种感觉,这可以很容易地完成。我正在尝试实现如下所示的片段之间的动画(请参阅第二和第三象限) 进入和退出并不难,但是预显示下一张和上一张卡片的屏幕以及无缝切换到下一张卡片超出了我的知识范围。如果有人制作过类似的动画,请给我一些指点。 编辑 Android的官方文档在点击时过渡,即当用户点击页面缩小以显示最后一页和上一页时,滑动将其移动到下一页。我的要求是将页面保

  • 我正在尝试使用Animation类设置ConstraintLayout高度的动画,而setDuration方法似乎不起作用。高度立即更改为所需的高度值。我在开发者选项中看到过关于动画被禁用的帖子,但这不是问题,它设置为1x。无论如何,代码如下:

  • 我正在我的应用程序中实现折叠工具栏,它应该没问题,但栏不受限制..不动不做任何!!! 这是我的布局. xml 这是我的活动 请告诉我为什么,提前谢谢! 更新:我已经解决了NestedScrollView的问题,我做了如下操作: