Fragment使用要点

一、添加fragment和删除fragment

  1. add:添加一个fragment到fragment manager。
  2. remove:从fragment manager中删除一个fragment。
  3. replace:替换fragment manager中的fragment。等同于先remove旧的fragment,然后add新的fragment。

当我们使用这几个操作的时候,还有一些细节需要了解。首先说明下操作参数。

  1. containerViewId:fragment创建的view会被添加到这个id代表的container中。查找container id的范围是由fragment manager的host决定的。activity 的fragment manager从activity的root view查找。fragment 的child fragment manager从fragment的root view查找。
  2. tag:为fragment指定一个标记,主要用于fragment的查询。这个标记可以不唯一,如果不唯一,那么在查询时返回的是具有相同标记并且后添加的fragment。

二、隐藏fragment和显示fragment

隐藏显示操作的本质是控制fragment 的root view隐藏或显示,所以它的控制是基于fragment已经添加到view 。用户可以调用fragment.isHidden()判断当前的显示状态,同时也可以通过覆写fragment的onHiddenChanged(boolean hidden)监听显示状态的变化。

  1. show:设置fragment显示。fragment必须已经添加到fragment manager并且他被隐藏。
  2. hide:设置fragment隐藏。。fragment必须已经添加到fragment manager。

三、fragment manager的回退栈管理

fragment manager的回退栈是通过操作压栈的方式实现的,当需要退栈时, fragment manager便进行操作回滚。用户可以通过下面方法进行操作栈管理:

  1. addToBackStack(@Nullable String name) name用于标记当前的操作。如果用户将操作压栈,那么调用commit()后会返回一个当前操作的唯一id标识。用户通过name标识或id标识都可以在操作栈中查找到操作。
  2. popBackStack(@Nullable String name, int flags);通过指定name标识进行操作退栈,如果指定的name标识不是唯一的,那么会从操作栈的根部开始匹配
  3. popBackStack(int id, int flags);通过指定id标识进行操作退栈,id标识是系统生成的,所以必然是唯一的。
  4. 被记录在操作栈中的fragment被用户通过非退栈的方式移除,比如调用remove方法移除。栈回滚是任然算一个状态,也就是说虽然用户看不到被移除的fragment,但他还是占用了一步回退操作。
  5. child fragment manager会单独的进行操作栈维护,不会被parent fragment manager识别,也就不被他管理。

四、Fragment查找

  1. findFragmentByTag(@Nullable String tag)可以通过指定tag来查找。
  2. findFragmentById(@IdRes int id);可以通过指定fragmentId来查找。fragmentId就是添加fragment时指定的containerId。
  3. tag/fragment查找的顺序与添加顺序相反,也就是说在tag/fragment相同的fragment中后添加的会被先查找到。

五、重建fragment问题

  1. configuration(切换语言、转屏) 变化时系统自动重建fragment,系统重建fragment时使用的是无惨构造函数。如果用户生成fragment时使用的是有参构造函数,那么这个参数在重建的fragment中无效。所以按照官方建议不要使用构造函数传参,而是要使用argument的方式传参数。因为在重建fragment时,argument可以被系统恢复。

我的公众号已经开通,公众号会同步发布。
欢迎关注我的公众号

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mjlong123123

你的鼓励时我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值