Fragment笔记和源码阅读
2015-05-13 10:11
239 查看
官方说明
为了自动恢复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才是VA.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
相关文章推荐
- Fragment源码阅读笔记
- Fragment相关源码阅读笔记(1)
- Fragment相关源码阅读笔记(3)FragmentManagerImpl
- Fragment相关源码阅读笔记(2)FragmentTransaction
- 阅读Fragment源码笔记
- Fragment源码阅读笔记
- Android源码阅读笔记(1)----Fragment
- memcached 源码阅读笔记
- Halide学习笔记----Halide tutorial源码阅读3
- JDK 1.7源码阅读笔记(七)集合类之HashMap
- Yii源码阅读笔记 - 错误/异常处理
- Redis源码阅读笔记-动态字符串(SDS)结构
- Spark源码阅读笔记:Spark集群中各个角色介绍
- Spark源码阅读笔记之BlockObjectWriter
- YunTable源码阅读笔记(1)
- 阅读安卓源码的笔记
- Choreographer 源码阅读笔记
- ThinkPHP源码阅读笔记(1)-入口文件
- tomcat源码阅读笔记二——初始化过程(上)
- java源码阅读笔记(1)- Object