Fragment笔记和源码阅读

官方说明

  • 为了自动恢复Fragment状态,Fragment需要有(三选一):
    • id
    • tag
    • 容器有id
  • FragmentTransaction 是一个标准的Command模式,将transaction压栈,供后续back时进行revert操作,不调用addToBackStack将会导致Fragment的引用被释放
  • commit不是立即执行,而是向UI Handler post了一个runnable,这个runnable把当前所有的任务都完成后,释放UI 线程。使用的就是executePendingTransactions()
  • 只能在Activity的onSaveInstanceState前调用commit。commitAllowingStateLose不限
  • 与Activity通信推荐使用自定义Listener
  • 如果需要定义ActionBar上的menu,需要在onCreate中setHasOptionsMenu()
  • Menu的handle顺序是先Activity后Fragment
  • 不同平台上的具体逻辑(portrait和landscape下的行为变化)需要手动改变

源码

  • Fragment继承自Object,是MVC中的C层,其成员变量mView才是V
  • A.Class.isAssignableFrom(B),检测A是不是B的父类(接口)或相同
  • 用ArrayMap存类比用Class.forName快,因为没有同步块,也少很多层调用
  • mCalled = false;
    onViewStateRestored(savedInstanceState);
    if (!mCalled) {
    throw new SuperNotCalledException("Fragment " + this
    + " did not call through to super.onViewStateRestored()");
    }
    检测被override的方法是否被调用
  • Fragment持有其所在的Activiy的强引用
  • onInflate是在onAttach之前调用的,官方推荐只进行参数的读存,即设置xml中的默认参数,在onCreate中设置bundle中的参数
  • onDestroyView被调用时,view还未从其parent上被移走
  • 必须调super.foo()的函数有:
    • onViewStateRestored
    • onCreate
    • onActivityCreated
    • onStart
    • onResume
    • onPause
    • onStop
    • onDestroyView
    • onDestroy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值