Android中的Fragment概述

来源:互联网 发布:淘宝一年前的购买记录 编辑:程序博客网 时间:2024/05/29 06:49

Fragment简介

      Fragment(碎片)是一种可以嵌入在Activity中的UI片段,它能让程序更加合理地利用大屏幕空间因而Fragment在平板上应用非常广泛。Fragment与Activity十分相似,它包含布局,同时也有自己的生命周期。
      Fragment需要包含在Activity中,一个Activity里面可以包含一个或者多个Fragment,而且一个Activity可以同时展示多个Fragment。同时,Fragment也具有自己的布局。

               Activity1                                                              Activity2

Fragement的生命周期

   与Activity生命周期十分相似
  1.运行状态
     当一个Fragment是可见的,并且它所关联的Activity正处于运行状态,那么该Fragment也处于运行状态。
  2.暂停状态
     当一个Activity进入暂停状态,与它相关联的可见Fragment也会进入暂停状态。
   3.停止状态
      当一个Activity进入停止状态,与它相关联的Fragment就会进入停止状态。或者通过调用FragmentTransaction的remove(),replace()方法将Fragment从Activity中移除。如果在事务提交之前调用addToBackStack()方法,这时的Fragment也会进入停止状态。

创建Fragment

      与创建Acitivity类似,要创建一个Fragment必须创建一个类继承Fragment。需要注意的是Android系统提供了两个Fragment类,分别是android.app.Fragment和android.support.v4.app.Fragment。继承android.app.Fragment类则程序只能兼容Android 4.0以上的系统,继承android.support.v4.app.Fragment类则可以兼容低版本的Android系统。
   1.创建Fragment
      示例代码
     public class Fragmentone extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1, container,false);
        return view;
        }   
   }
    上述代码重写了Fragment的onCreatView()方法,并在该方法中调用了LayoutInflater的inflate()方法将Fragment布局动态加载起来。
   2.添加Fragment
     Fragment创建完成后不能单独使用,还需要将Fragment添加到Activity中,在Activity中添加Fragment有两种方式,一种是直接在布局文件中添加,将Fragment作为Activity整个布局的一部分;另一种是当程序运行时,动态的将Fragment添加到Activity中。
     示例代码:
     <fragment
    android:id="@+id/fragment1"
    android:name="com.jay.example.fragmentdemo.Fragmentone"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

    动态加载示例代码:

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Display dis = getWindowManager().getDefaultDisplay();
        if(dis.getWidth() > dis.getHeight())
        {
            Fragment1 f1 = new Fragment1();
            getFragmentManager().beginTransaction().replace(R.id.LinearLayout1, f1).commit();
        }
        
        else
        {
            Fragment2 f2 = new Fragment2();
            getFragmentManager().beginTransaction().replace(R.id.LinearLayout1, f2).commit();
        }
    }   
}
Fragment与Activity的交互
  1)组件获取
       Fragment获得Activity中的组件: getActivity().findViewById(R.id.list);
       Activity获得Fragment中的组件(根据id和tag都可以):getFragmentManager.findFragmentByid(R.id.fragment1);
   2)数据传递
      ①Activit传递数据给Fragment:
         在Activity中创建Bundle数据包,调用Fragment实例的setArguments(bundle) 从而将Bundle数据包传给Fragment,            然后Fragment中调用getArguments获得 Bundle对象,然后进行解析就可以了
      ②Fragment传递数据给Activity


原创粉丝点击