您的位置:首页 > 其它

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才是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: