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

来源:互联网 发布:jenkins java 配置 编辑:程序博客网 时间:2024/05/07 13:41
总结一下项目中对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
原创粉丝点击