在不播放 Pop 动画的情况下弹出片段返回堆栈

2024-04-30

我使用以下代码将片段推送到片段堆栈上:

FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_right,
     R.anim.slide_in_left, R.anim.slide_out_left);
fragmentTransaction.replace(getId(), newFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

这样,当片段堆栈被弹出时,例如通过按后退按钮,会播放片段弹出动画。但是,在某些情况下,我想弹出片段后退堆栈而不显示此动画,例如因为我刚刚从另一个活动返回,想要立即显示前一个片段,而不使用动画。

导航示例如下所示:

  • 用户位于带有根片段的开始屏幕上
  • 他选择根片段上的一个项目,然后显示一个新片段以显示该项目的详细信息。它使用片段事务来实现这一点,该片段事务为推送和弹出情况设置动画(因此当用户按下后退按钮时,过渡是动画的)
  • 从这个片段中,他启动了一个活动(无论出于何种原因)删除刚刚显示的项目
  • 当此活动完成时,我想返回根片段而不显示“详细片段”的“弹出动画”

有没有办法在不播放指定弹出动画的情况下弹出片段后退堆栈?


所以 Warpzit 是在正确的轨道上,他只是没有很好地解决你的具体问题。我遇到了完全相同的问题,这就是我解决它的方法。

首先,我创建了一个静态布尔变量(为了简单起见,让我们将其放入 FragmentUtils 类中)...

public class FragmentUtils {
    public static boolean sDisableFragmentAnimations = false;
}

然后,在您拥有的每个片段中,您需要重写 onCreateAnimation 方法......

@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
    if (FragmentUtils.sDisableFragmentAnimations) {
        Animation a = new Animation() {};
        a.setDuration(0);
        return a;
    }
    return super.onCreateAnimation(transit, enter, nextAnim);
}

然后,当您需要从活动中清除后台堆栈时,只需执行以下操作...

public void clearBackStack() {
    FragmentUtils.sDisableFragmentAnimations = true;
    getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    FragmentUtils.sDisableFragmentAnimations = false;
}

瞧,调用clearBackStack() 将使您回到根片段,而没有任何过渡动画。

希望大G将来能添加一种不那么愚蠢的方法来做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在不播放 Pop 动画的情况下弹出片段返回堆栈 的相关文章

随机推荐

  • 多行 JTable 单元格在编辑期间不是多行的

    我正在开发一个应用程序 它有一个需要多行单元格的 JTable 因此 我扩展了 JTextArea 一切都显示出来了 但是当我尝试编辑单元格时 文本显示为单行 编辑后变为多行 我希望文本在编辑过程中保持多行 有没有办法做到这一点 创建您的表
  • Jquery 文件上传 - $_FILES 数组为空

    使用 Jquery 文件上传 它正在 工作 并上传图像并显示拇指 但是 当我在处理程序中提交表单时 如果我转储 FILES 则那里什么也没有 我基本上使用的是 Basic Plus 示例 并将 autoUpload 设置为 false 我希
  • 日期获取自定义周开始日的周数

    如果我有自定义周开始日而不是星期一 应该如何更改 Date 类的 getWeekNumber 原型 当前查找 ISO 周数的代码 Date prototype getWeekNumber function Create a copy of
  • Mono.Cecil 类似 Type.GetInterfaceMap 之类的东西吗?

    系统 反射 类型包含获取接口映射 http msdn microsoft com en us library system type getinterfacemap aspx这有助于确定哪些方法从接口实现某些方法 Does 莫诺 塞西尔包含
  • 检测空 UITextField 中的退格键

    Is there any way to detect when the Backspace Delete key is pressed in the iPhone keyboard on a UITextField that is empt
  • 如何将嵌套的 javascript 对象转换为仅第一级属性对象?

    我有以下对象inputObj我想将其转换为一个简单的对象 例如outputObj var inputObj a 1 b true c string1 d e string2 f false g 5 h i 7 j string3 k nam
  • 无法实例化类:org.jnp.interfaces.NamingContextFactory

    这是我的代码 扬声器远程 java package test import javax ejb Remote Remote public interface SpeakerRemote String sayAPhrase String ph
  • VueJS 将类切换到表中的特定元素

    我似乎不知道如何在表中的特定项目上切换类 我使用 v for 循环数据并将其打印给用户 目标是当用户单击表内的特定元素时切换类 当我尝试添加 v bind class active isActive 时 它只是将该类添加到所有类中 而不是特
  • Angular JS:如何通过 $http 设置所有调用的上下文路径?

    我正在 Web 服务器中部署我的 Angular 应用程序 该应用程序可能位于http localhost 8080 app name or http foobars com 或其他一些 URL 我对绝对路径没有任何保证 有时调用可能需要转
  • 请求库在 HTTPS 代理 CONNECT 上强制使用 HTTP/1.1

    我遇到了 HTTP 代理服务器行为异常的问题 不幸的是 我无法控制代理服务器 它是 IBM 的 企业 产品 代理服务器是用于软件测试的服务虚拟化解决方案的一部分 根本问题 我认为 是代理服务器发回 HTTP 1 0 响应 我可以从 SOAP
  • 如何通过向上移动到地址栏来检测鼠标离开页面?

    我创建了一个 jQuery 事件 当访问者离开页面时会弹出一个对话框 我正在使用 e pageY 来检测鼠标位置 当鼠标位于Y 小于2时 弹出对话框 问题是 当我向下滚动页面并决定离开页面时 弹出窗口不会显示 因为鼠标不在 Y 小于 2 处
  • Django - 检测用户是否在线/离线

    我正在使用 Django 1 10 和 Django REST 我需要知道用户是否登录 离线 在线 我怎样才能做到这一点 我正在使用基于令牌的身份验证 我试过这个article http www djangocurrent com 2011
  • 使用 Perl 进行数据签名

    我参与了这个涉及发送签名数据的项目 我已经获得了一个 pem 文件和一个服务器证书 我应该将其导入到另一台服务器 我应该使用这些文件对数据进行签名 然后将签名的数据发送到另一台服务器进行验证和处理 我的问题是 如何将这两个文件导入到我的服务
  • 如何在vim中将菜单键(“应用程序键”)映射到Escape键?

    我认为使用菜单键退出 vim 的插入模式将是一件很棒的事情 使用 Super 键也很好 但我不确定是否可能 因为 Super 键是一个修饰符 无论如何 我找不到任何与此相关的内容 寻求您的帮助并提前致谢 我认为没有任何方法可以配置 Vim
  • 登录成功后身份服务器不重定向

    我正在尝试使用 MVC 客户端设置 IdentityServer4 一切工作正常 直到我想添加 ASP 身份 当我添加代码来使用 SQL Server 和 Identity 时 成功登录后 Identity 服务器不会将我重定向回客户端 而
  • 无法读取数据,因为它的格式不正确。”

    2 https i stack imgur com 7QlIS pngI am using AFNetworking to send data to server Below is my code AFHTTPRequestOperatio
  • 如何将 System.Windows.Forms 添加到我的 .NET 5.0 项目中?

    对于我缺乏术语和理解 我提前表示歉意 我对 NET 和 Visual Studio 非常陌生 我在 Windows 7 64 位上的 Visual Studio Community 2019 版本 16 10 4 中使用 Visual Ba
  • 为什么我们需要带有聚合函数的 GROUP BY?

    我看到一个例子 其中有一个员工列表 表 及其各自的月薪 我对工资进行了汇总 并在输出中看到了完全相同的表格 这很奇怪 这是必须做的 我们必须找出本月我们支付多少员工工资 为此 我们需要在数据库中对他们的工资金额进行求和 如下所示 SELEC
  • 获取数组中所有LI元素

    如何让 JS 选择 UL 标签内的每个 LI 元素并将它们放入数组中 div ul li One li li Two li li Three li li Four li li Five li ul div 我可以让 JS 将它们每个放入一个
  • 在不播放 Pop 动画的情况下弹出片段返回堆栈

    我使用以下代码将片段推送到片段堆栈上 FragmentManager fragmentManager getActivity getSupportFragmentManager FragmentTransaction fragmentTra