项目中Fragment show/pop的使用和实现

总结一下项目中对Fragment show/pop的使用和实现:
很简单,简单的包装套了个命令模式.

<1>在规划整体的layout时,就预先为Fragment留了几个View作为container<平时都是backgroudn为null透明>.
打好地基,以后基本没有更改过.

<2>show/pop Fragment的操作采用了 命令模式, 封装为了一个类,
在需要show/pop Fragment时, 会将要做的操作(add/remove/replace), 被操作的fragment实例引用,
以及backstackName<可以没有>,还有Fragment切换时的transition效果,优先级作为构造参数填入,
并且按照 命令模式 还实现了execute函数来进行真正的操作,通过EventBus将这个command送出去,
目前都是由MainActivity来handle这个command的.

<3>MainActivity在收到Command以后要考虑现在是不是在pause状态<就是被切到了后台不可见状态>,
如果在pause状态,那么将这个Command加入到pendingCommandList中<如果优先,那么加队头>,
在Activity resume的时候会将pending的Command全部执行.

<4>MainActivity的所谓执行Command,其实就是简单的调用了Command自己的execute罢了
<这也是命令模式的特点,处理逻辑全部封装在Command中,执行者不需要知道任何操作细节>.

<5>在execute的时候,会先将之前的pending的FragmentTransaction都执行<FragmentManager.executePendingTransactions()>
完了以后,如果是add, 并且发现还提供了backstackName, 那么就将是该backstackName的
Fragment和其上面的fragment全部都pop出去<确保不会有两个相同backstackName的fragment被add到同一个activity,
popBackStack(backstackName, FragmentManager.POP_BACK_STACK_INCLUSIVE)>,
对于transition,如果是TRANSIT_UNSET,那么使用自己定制的一套.
得到FragmentTransaction以后根据不同操作和不同的container进行相应的add/replace/remove.
如果有backstackName,会addToBackStack(backstackName),commit后为了保证立刻生效,会再次executePendingTransactions().

<6>Remove操作基本不用<后来取消了>,
每次基本都是fragment自己直接FragmentManager.popBackStackImmediate()了,能这么做的前提是

这个fragemnt当前是Activity的top state.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值