- 常用的一些方法
- 生命周期
- 参考 郭霖大神的 CSDN 、Android Developer
简介
碎片、片段,Fragment 的翻译可以让人直观的了解到它设计的思路和用法。
Android 3.0 以上。
生命周期及相关方法
- onAttach(Activity)
Fragment和Activity建立关联的时候调用。
- onCreate(Bundle)
系统会在创建片段时调用此方法。您应该在实现内初始化您想在片段暂停或停止后恢复时保留的必需片段组件。
- onCreateView(LayoutInflater, ViewGroup, Bundle)
系统会在片段首次绘制其用户界面时调用此方法。 要想为您的片段绘制 UI,您从此方法中返回的 View 必须是片段布局的根视图。如果片段未提供 UI,您可以返回 null。
- onActivityCreated(Bundle)
当Activity中的onCreate方法执行完后调用。
- onPause()
系统将此方法作为用户离开片段的第一个信号(但并不总是意味着此片段会被销毁)进行调用。 您通常应该在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。
onDestroyView方法:Fragment中的布局被移除时调用。
onDetach方法:Fragment和Activity解除关联的时候调用。
运行一下程序,可以看到打印日志如下:
这时点击一下home键,打印日志如下:
如果你再重新进入进入程序,打印日志如下:
然后点击back键退出程序,打印日志如下:
Fragment 的创建
简单的 Fragment 可以通过重写 onCreateView() 方法来实现。
onCreateView(LayoutInflater inflater, ViewGroup container,BundlesavedInstanceState)
一般使用该方法返回一个 View 对象提供给 Activity ,
所以在这里加载 xml 布局文件,参数中,
container :参数是布局将插入到的父ViewGroup(来自 Activity 的布局)
savedInstanceState :在恢复 Frafment 时,提供上一片段实例相关数据的 Bundle
inflater : 可以用来获取 xml 文件的控件。
View view = inflater.inflate(R.layout.activity_news_two,container,false);
ListView newslistView=(ListView) view.findViewById(R.id.show_news);
//ListView newslistView = (ListView) getActivity().findViewById(R.id.show_news);
//getActivity() 获取的对象可以用来获取同一个 Activity 上不同的 Fragment 的控件。
inflate 方法的三个参数:
xml 文件的ID;
将作为扩展布局父项的 ViewGroup 对象。传递 container对系统向扩展布局的根视图(由其所属的父视图指定)应用布局参数具有重要意义;
指示是否应该在扩展期间将扩展布局附加至 ViewGroup(第二个参数)的布尔值。
Activity 与 Fragment
- 动态添加、删除 Fragment
获取 FragmentTransaction 对象
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container,fragment);//添加到的地方
//fragmentTransaction.remove(fragment);
//fragmentTransaction.replace();
//fragmentTransaction.hide();
//fragmentTransaction.show();
fragmentTransaction.commit();
- 两者的通信
- 事务栈
调用 addToBackStack(),以将事务添加到片段事务返回栈。 该返回栈由 Activity 管理,允许用户通过按返回按钮返回上一片段状态
transaction.add(R.id.fragment_container,fragment);
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);//
transaction.commit();
点击返回的时候,上面的操作会被全部撤销。
而且这些操作还可以通过setTransition()设置过度动画。