自学fragment笔记

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-02 19:53:01

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();提交事务

       }

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!