Fragment 学习

1. A Fragment must be embeded in an activity and the Fragment's lifecycle is directly affected by the host activity's lifecycle.

2. when you add a fragment as a part of your activity layout,it lives in a viewgroup inside the activity's view hierarchy and it defines ite own view layout.

3. fragment 的 UI 不是必须的,可以定义不可见的 fragment 来实现某种功能(可见sdk自带的例子 Api Demos --> App --> Fragmeny --> Retain Instance)。

4. inflater.inflate(resource, root, attachToRoot) 的方法的第三个参数,是表示 是否要在实例化的过程中将实例出的view加到root上去。如果系统会自动给我们加或者已经加过了,这个参数就应该使用 false。在 fragment 的 onCreateView 方法中,这个参数就应该设为 false ,因为系统会自动把 fragment 加到 activity 的 layout 上,如果设为 true,动态添加会抛出IllegalStateException,静态添加没问题(也不会重复加载视图).

5. 可以给 fragment 设置一个标识(后面如果要操作这个 fragment, 就应该一定为它设置标识)。设置的方法有三种:1. XML 中使用 android:id, 2. XML 中使用 android:tag;3. 如果没有用以上两种方法,系统就会使用 fragment 的 container 的标识。若这个 container 中有多个没有明确指定标识的 fragment,则这个 container 的标识会用来标识最后一个加入到该 container 中的 fragment.

6. 使用 add(Fragment, String) 来添加无 UI 的 fragment。其中 String 是这个 fragment 的tag标识,必须要加。添加无UI的 fragment 的时候,fragment 的生命周期函数正常执行。

7. 可以使用 FragmentManager.addOnBackStackChangeListener() 来给 BackStack 添加监听事件。

8. 对于一个 transaction,可以添加动画,两种方法:1. setTransition(), 2。setCustomAnimations().

9. commit() 方法之后,并不会使 UI 线程立即执行改变,而是等到 UI 线程 is able to do 才会执行。可以调用 FragmentManager.executePendingTransactions() 来使 UI 线程立即执行改变。

10. 只能在 activity 保存它的状态之前调用 commit(),在保存之后再调用会抛出异常。因为如果 activity 恢复状态的话,这个 transaction 提交的操作可能会丢失。

11. 生命周期相关

1)。对 fragment 执行会引起 remove 的操作时,如果在 commit() 之前调用了 addToBackStack,则被 remove 的 fragment 会走到OnDestroyView,如果没有调用,则这个fragment 会被销毁。

2)。 hide 和 show 方法不走任何生命周期函数。

3)。创建对象实例的时候,不会执行生命周期函数,在执行添加操作的时候,生命周期函数才开始执行。

12. fragment 可以创建菜单,如果要创建 options 菜单,应该在 onCreate 方法中调用 setHasOptionsMenu(true),然后系统就会调用定义在 fragment 中的 onCreateOptionsMenu() 来创建菜单;如果要创建 ContextMenu(这种类型的 menu 是对应于某一个view的,也就是对某个view进行操作,会显示出 contextMenu,后面注册就是注册这个引发 contextMenu 的view),应该在 onCreate 中调用 registerForContextMenu(),然后系统就会调用定义在 fragment 中的 onCreateContextMenu() 方法。如果一个 fragment 向系统表示了它有创建菜单的意图,那么系统就会调用定义它里面的和菜单操作相关的函数。即使这个 fragment 中没有添加新的菜单项,至少可以处理定义在 activity 中的菜单项。

13. fragment 之间可以通过 setTargetFragment 和 getTargetFragment 来交流。


添加 fragment 的方法

1. XML 中添加

<fragment
            android:name="com.example.fragmenttest.MyFragment"
            android:id="@+id/frag"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

2. 代码添加

FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.container, new MyFragment());
transaction.commit();


把 fragment 定义到 activity 的 xml 文件中时,启动 activity 时生命周期函数的执行流程是:

(activity) onCreate --> ( fragment ) onAttach --> ( activity ) onAttachFragment --> (fragment) onCreate --> (fragment) onCreateView --> (fragment) onActivityCreated --> (activity) onStart --> (fragment) onStart --> (activity) onResume --> (fragment) onResume

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值