Fragment
Fragment
1.什么是Fragment
他就是为了解决不同屏幕不同大小,UI重用的一个部件,他将1个activity拆分成不同小的单元,在小的单元里面定义自己的UI,最后把他们组合一起 和包含他们的activity一起共同工作
为了更好地布局以及重用一些代码。
大多数情况有UI, 可以给activity
提供没有UI的提供后台行为Fragment
。
1.2有点
模块化(Modularity):我们不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中。
可重用(Reusability):多个Activity可以重用一个Fragment。
2.创建Fragment
的方式:
1.静态 XML
方式
①activity的布局xml中 添加fragment标签,并指定name
属性为你创建的Fragment
的子类
②在创建的Fragment
中的重写onCreatView
方法,返回一个从为Fragment
写的布局xml
中加载的View
2.动态:在代码中添加(更常用)
①activity的布局xml中 添加Fragment的占位标签,比如用FrameLayout
②获取FragmentManager
,开启事务,添加你的Fragment到第一步写的占位布局中,提交事务
3.Fragment
的删除和替换
FragmentTransaction
的remove
(Fragment
f
) 和replace``(int resId,Fragment f)
方面
加入返回栈addToBackStack
(null)
Fragment
被替换后调用addToBackStack
(null),按返回键,可以返回到前1个Fragment
4.Fragment的生命周期
onAttachonAttach()
在片段已与 Activity 关联时进行调用(Activity
传递到此方法内)。
onCreateViewonCreateView()
调用它可创建与片段关联的视图层次结构。
onActivityCreatedonActivityCreated()
当 Activity 的 onCreate()
方法已返回时进行调用。
onDestroyViewonDestroyView()
在移除与片段关联的视图层次结构时进行调用。
onDetachonDetach()
在取消片段与 Activity 的关联时进行调用。
Fragment 的生命周期和 Activity 很相似,只是多了一下几个方法:
onAttach() 在Fragment 和 Activity 建立关联是调用(Activity 传递到此方法内)
onCreateView() 当Fragment 创建视图时调用
onActivityCreated() 在相关联的 Activity 的 onCreate() 方法已返回时调用。
onDestroyView() 当Fragment中的视图被移除时调用
onDetach() 当Fragment 和 Activity 取消关联时调用。
可以看下几种操作情况下Fragment 的生命周期变化
5.系统内置的Fragment子类
5.1DialogFragment
1.继承DialogFragment
,重写onCreatDialog
返回一个Dialog
对象
2.Activity
种创建DialogFrament
的子类对象,调用show()
3.演示了AlertDialog
,设置日期和设置时间的Dialog
5.2ListFragment
(封装了一个1个ListView
)
5.3PreferenceFragment
(设置)
6.Fragment
之间的通信
fragment中要更新activity
的Ui,通过getActivity
().findViewById
是不是最佳的方法?
1.Activity访问所属的Fragment的控件,成员变量
①拿到Fragment
对象:
静态的Fragment
:getFragmentManager
().findFragmentBy
..()
动态的Fragment
: 直接用在activity
创建的Fragment的对象的引用
②拿到Fragment
的根View后找子View:fragment.getView().findViewByid(..)
2.Fragment中访问Activity的控件
- 重写
onActivityCreated
()方法,在这里通过getActivity().findViewById
获得并更新Activity的UI控件对象
3.Fragment与Fragment
4.Fragment与Activity之间(或其他Fragment)的通信最佳方式:
- 不通过接口的直接在fragment中更新activity的控件这种方式和具体Actvitiy绑定较紧,高耦合,换1个activity就不能用了
- 在发起事件的Fragment中定义interface接口,并在onAttach()方法中初始化该接口的引用变量,让其附着的Activity实现这个接口
7.android.app.Fragment 和support.v4.Fragment的区别
Fragment用法
1.静态
2.动态
3.结合viewpager
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!