Fragment 的设计理念就是可以支持更灵活的UI操作, 同时对大屏幕的设备有了更好的适应性. Fragment可以理解为Activity里面的一个”子Activity”, 可以单独的处理动作增加删除等.每个Activity内部都维护着一个Fragment专用的堆栈, 这样用户在按下返回键的时候, 可以回到Fragment的前一个状态.
Fragment的添加:
可以通过在Activity的布局文件中添加<fragment>标签添加Fragment(静态), 或者在代码中直接添加一个fragment(动态).
通过标签指定fragment的xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
fragment:name指定了fragment的类. Fragment可以使用id或者tag来作为自己的唯一标识. 静态添加的fragment使用方便, 布局简单, 用法跟view等类似, 但是不可以被动态删除或者替换.
动态添加也不难, 三部曲:
首先你需要有一个viewgroup, 比如fragment_layout.
在Activity中获取到FragmentManager, 通过FragmentManager获取到FragmentTransaction
通过FragmentTransaction将fragment添加到指定的viewgroup里, 然后不要忘记commit().
替换和删除也是一个套路. 代码:
getFragmentManager().beginTransaction().add(R.id.fragment_layout, fragment).commit();
Fragment的生命周期:
Fragment的生命周期跟Activity非常类似, 大同小异. 并且方法的调用跟它的Activity是相关联的.
相比Activity新增加了onAttach(), onCreateView(), onActivityCreated(), onDestroyView(),onDetach(). 其中:
onAttach():表示当Activity与fragment关联的时候调用, 现在它有两个版本, 在API23之前是onAttach(Activity activity), API23之后推荐使用onAttach(Contextcontext), 在API23版本中onAttach(Activity activity)方法将不会被调用.
onCreateView():当fragment第一次绘制自己的界面的时候, 会调用该方法.
onActivityCreated(): 当Activity的onCreate()方法return之后, 会调用该方法.
销毁的方法跟前面的创建方法相对立, 就不说了. 下面是Activity和Fragment启动时回调方法的调用顺序: (Fragment的创建是在Activity的onCreate()方法中完成的)
参考: http://developer.android.com/guide/components/fragments.html