• Fragment转场动画的那些坑(仅分析v4包下的fragment)


    前言

    一些小伙伴在使用Fragment的时候,其实默认是没有转场动画的,在开发过程中,某些特定的需求场景下,是需要使用转场动画的,原生的Fragment其实也是为此提供了API支持的,就是写起来稍微有些麻烦,那么小伙伴们,在使用转场动画的时候,都遇到了那些大坑呢?

    getFragmentManager().beginTransaction().setCustomAnimations(enter, exit) 
    // 如果你有通过tag/id同时出栈多个Fragment的情况时, 
    // 请谨慎使用.setCustomAnimations(enter, exit, popEnter, popExit) 
    // 在support-25.4.0之前出栈多Fragment时,伴随出栈动 画,会在某些情况下发生异常 
    // 你需要搭配Fragment的onCreateAnimation()临时取消出 栈动画,或者延迟一个动画时间再执行一次上面提到的Hack方法,排序
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:如果你想给下一个Fragment设置进栈动画和出栈动画,.setCustomAnimations(enter, exit)只能设置进栈动画,第二个参
    数并不是设置出栈动画;
    请使用.setCustomAnimations(enter, exit, popEnter, popExit),这个方法的第1个参数对应进栈动画,第4个参数对应出栈动画,所以是.setCustomAnimations(进栈动画, exit, popEnter, 出栈动画))

    总结起来就是Fragment没有出栈动画的话,可以避免很多坑。如果想让出栈动画运作正常的话,需要使用Fragment的 onCreateAnimation中控制动画。

    @Override public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { // 此处设置动画 }
    
    • 1

    但是使用代价也是有的,你需要解决出栈动画带来的几个坑。

    1. pop多个Fragment时转场动画 带来的问题

    在使用 pop(tag/id)出栈多个Fragment的这种情况下,将转场动画临时取消或者延迟一个动画的时间再去执行其他事务;

    原因在于这种情景下,可能会导致栈内顺序错乱(上文有提到),同时如果发生“内存重启”后,因为Fragment转场动画没结束时再执行其他方法,会导致Fragment状态不会被FragmentManager正常保存下来。

    2. 进入新的Fragment并立刻关闭当前Fragment 时的一些问题

    2.1 如果你想从当前Fragment进入一个新的Fragment,并且同时要关闭当前Fragment。由于数据结构是栈,所以正确做法是先pop,再add,但是转场动画会有覆盖的不正常现象,你需要特殊处理,不然会闪屏!

    如果你遇到Fragment的mNextAnim空指针的异常(通常是在你的Fragment被重启的情况下),那么你首先需要检查是否操作的
    Fragment是否为null;其次在你的Fragment转场动画还没结束时,你是否就执行了其他事务等方法;解决思路就是延迟一个动画时间再执行事务,或者临时将该Fragment设为无动画。

    归纳

    在使用Fragment的时候,其实有很多的坑,不过在遇到问题的时候,在网上都能找到相对应的解决问题的方法。

    如果你只是浅度使用,比如一个Activity容器包含列表Fragment+详情Fragment这种简单情景下,不涉及到popBackStack/Immediate(tag/id)这些的方法,还是比较轻松使用的,出现的问题,网上都可以找到解决方案。

    但是如果你的Fragment逻辑比较复杂,有特殊需求,或者你的app架构是仅有一个Activity + 多个Fragment,上面说的这些坑,你都应该全部解决。

  • 相关阅读:
    第十二届蓝桥杯物联网试题(国赛)
    mysql创建用户名密码并管理用户名密码
    【FPGA的小娱乐】在tft显示屏上画X型
    linux之eventfd理解
    C++ 【new,delete内存管理】
    如何安装Node.js? 创建Vue脚手架
    使用openpyxl库读取Excel文件数据
    2000-2022年上市公司行业异质性数据(技术密集型、劳动密集型、资本密集型)(含原始数据和处理代码)
    文化常识(通用)
    Flink学习(七)-单词统计
  • 原文地址:https://blog.csdn.net/huang3513/article/details/126399124