fragment(碎片)是一种嵌入在activity中的UI片段,它可以用来描述activity中的一部分布局,fragment可以把屏幕布局分成好几块片段,进行模块化的管理,从而使程序更加合理和充分地利用屏幕的空间。一个activity中可以包含多个fragment,一个fragment也可以在多个activity中使用,如果在activity中有多个相同的业务模块,则可以复用fragment。
Fragment的生命周期跟Activity的生命周期十分相似 ,也有启动状态、运行状态、暂停状态、停止状态和销毁状态,但fragment比activity多了以下几个方法,具体如下:onAttach():fragment和activity建立关联时调用;onCreateView():fragment创建视图(加载布局)时调用;onActivityCreate():fragment相关联的activity已经创建完成时调用;onDestroyView():fragment关联的视图被移除时调用;onDetach():fragment和activity解除关联时调用。
创建Fragment与Activity类似,必须创建一个类继承自Fragment。创建NewListFragment类的实例代码如下:
public class NewListPragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,
bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment,container,false);
return v;
}
}
上述代码重写了fragment的onCreateView()方法,并在该方法中通过layoutInflater的inflate()方法将布局文件fragment.xml动态加载到Fragment中。
Android系统中提供两个Fragment类,这两个类分别是android.app.Fragment和android.support.v4.app.Fragment。如果NewsListFragment类继承的是
前者,则程序只能兼容3.0版本以上的Android系统,如果NewsListFragment类继承的是后者,则程序可以兼容1.6版本以上的Android系统。
Fragment创建完成后并不能单独使用,需要将Fragment添加到Activity中。有两种方法,如下:
1、在布局文件中添加Fragment
这种方法需要使用<fragment></fragment>标签该标签指定android:name属性,其属性值为Fragment的全路径名称。在LinearLayout布局中添加NewsListFragment的实例代码如下:
<LinearLayout xmlns:android="http://schemas.android.com.apk/res/android"
xmlns:tools="http://schemas.android.com./tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:name="cn.itcast.NewsListFragment"
android:id="@+id/newslist"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</Linearlayout>
2、在Activity中动态加载Fragment
具体步骤如下:
(1)创建一个Fragment的实例对象
(2)获取FragmentManager(Fragment管理器)的实例
(3)开启FragmentTransactiion(事务)
(4)向Activity的布局容器(一般为FrameLayout)中添加Fragment
(5)通过commit()方法提交事务
实例代码如下:
public class MAinActivity extends Activity{
@SuppressLint(“NewApi”)
@Override
protected void onCreate(Bundle savedInstanceSrate){
super.onCrete(savedInstanceState);
setContentView(R.layout.activity_main);
NewsListFragment fragment = new NewsListFragment();//实例化Fragment对象
FragmentManager fm = getFragmentManager();//获取FragmentManager实例
//获取FragmentTransaction实例
FragmentTransaction beginTransaction = fm.beginTransact();
beginTransaction.replace(R.id.11,fragment);//添加一个Fragment
beginTransac.commit();提交事务
}
}
原文:https://www.cnblogs.com/wsyd/p/11761570.html