可以把Fragment当成Activity的一个界面的一个组成部分或一种行为。Activity的界面可以完全有不同的Fragment组成,Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响。
Fragment使用:
1.创建一个Fragment,实现onCreate()、onCreateView()、onPause()等一些方法。
2.向Fragment增加一个用户界面。
要想提供一个layout布局文件给Fragment,必须实现 onCreateView()回调方法。这个在Fragment要绘制界面时,系统调用。
public View onCreateView(LayoutInflater inflater, ViewGroup container,
BundlesavedInstanceState) {
return inflateAndSetupView(inflater,container, savedInstanceState,
R.layout.contact_tile_list);
}
3.向Activity增加Fragment
(1)在Activity中声明布局文件
在Activity的布局文件中将Fragment作为一个子标签加入
<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>
(2)编码方式向一个存在的ViewGroup增加Fragment
为了确保在Activity中处理Fragment必须使用FragmentTransaction的API,可以这样获得FragmentTransaction的实例:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//这时可以通过add方法把Fragment加入到指定的ViewGroup中
ExampleFragment fragment =new ExampleFragment();
//第一个参数是存在的指定的容器的id,第二个参数是要加进去的Fragment
fragmentTransaction.add(R.id.fragment_container,fragment);
//一旦你使用 FragmentTransaction改变了东西,一定要调用commit()方法才能起作用
fragmentTransaction.commit();
4.管理Fragment
(1)取出一个Fragment通过findFragmentById()或findFragmentByTag();
(2)使用 popBackStack() 方法,从后台堆栈中弹出一个fragment;
(3)为后台堆栈注册能监听改变的监听器, addOnBackStackChangedListener();