您的位置:首页 > 其它

Fragment初步

2015-12-29 17:18 381 查看
使用 fragment的 2种方式: 静态布局, 和 代码动态添加

1 , 使用 <fragment>标签 像普通 view 一样整合到 xml文件中. 使用这种方式 会将 fragment及其内容视图和 activity视图绑定在一起.且在activity的生命周期过程中,无法切换fragment视图!!!

即使用代码 replace 另一个fragment,结果也是2个视图重叠在一起. 可以尝试用不同背景色掩盖掉.

2, 使用 第二种方式, 需要一个FrameLayout作为Fragment的容器视图. 它的作用 类似于 web中的占位符. in fact ,it's really done this.

可以使用 该 framelayout 的资源 ID(如 R.Id.container) 来获取 该 fragment的实例.

just like this: getFrgamentManager.findFragmentByID(R.Id.container)

FragmentManager使用FrameLayout组件的资源ID去识别Fragment,这看上去可能有点怪。但实际上,

使用容器视图资源ID去识别UI fragment已被内置在FragmentManager的使用机制中。

Fragment类引入到Honeycomb时,为协同工作,Activity类被更改为含有FragmentManager类。

FragmentManager类具体管理的是:

 fragment队列;

 fragment事务的回退栈

如果你 使用的 是 支持库 的 fragment 那么Activity必须是 FragmentActivity 且 获取 FragmentManager 时 是: getSupportFragmentManager()

fragment事务被用来添加、移除、附加、分离或替换fragment队列中的fragment。这是使用fragment在运行时组装和重新组装用户界面的核心方式。

FragmentManager管理着fragment事务的回退栈

获取事务 的方式 : FragmentManager.beginTransaction()

fragment 的生命周期 !

FragmentManager立即驱使fragment快速跟上activity的步伐,直到与activity的最新状态保持同步。例如,向处于运行状态的activity中添加fragment时,以下fragment生命周期方法会被依次调用:

onAttach(Activity)、onCreate(Bundle)、 onCreateView(...)、onActivityCreated(Bundle)、onStart(),以及onResume()方法。

只要fragment的状态与activity的状态保持了同步,托管activity的FragmentManager便会继续调用其他生命周期方法以继续保持fragment与activity的状态一致,而几乎就在同时,它接收到了从操作系统发出的相应调用。但fragment方法究竟是在activity方法之前还是之后调用的这一点是无法保证的。

支持库的fragment生命周期的某些方法被调用的顺序则略有不同。如在Activity.onCreate(...)方法中添加fragment,那么onActivityCreated(...)方法是在Activity.onStart()

方法执行后被调用的,而不是紧随Activity.onCreate(...)方法之后被调用。

原因 是 在Honeycomb以前的版本中,立即从FragmentActivity中调用onActivityCreated(...)方法是不可能的。因此,下一个生命周期方法一执行,它才会被调用。在实际开发中,二者通常没什么区别;onStart()方法会紧随Activity.onCreate(...)方法之后被调用

在代码 动态 fragment中, 移除或替换 fragment 会导致 销毁 onPause --onStop -- ondestoryView--onDistory-- onDetach. 但如果该fragment 被加入了返回栈. 那么 只会

到 -- onDestoryView 就停了 而不会真正的销毁.

从返回栈 返回后, 该fragment 会从 onCreateView 开始 ( 静态 fragment 会从 OnActivityCreate开始, 应为 它 的view 无法移除)

fragment的周期函数正是 被fragmentManager 管理调用的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: