Android知识移动开发

Android开发:Fragment生命周期概述

2016-12-14  本文已影响579人  Gunther
  1. 简介
  2. 使用说明
  3. 生命周期

简介

Fragment就是小型的Activity,它是在Android3.0时出现的。Fragment是表现Activity中UI的一个行为或者一部分。

可以把fragment想象成activity的一个模块化区域,有它自己的生命周期,接收属于它自己的输入事件,并且可以在activity运行期间添加和删除(有点像一个可以在不同的activity中重用的子Activity)

Fragment必须被嵌入到一个activity中。它们的生命周期直接受其宿主activity的生命周期影响。当一个activity正在运行时,就可以独立地操作每一个Fragment,比如添加或删除它们。

Fragment可以定义自己的布局、生命周期回调方法,因此可以将fragment重用到多个activity中,因此可以根据不同的屏幕尺寸或者使用场合改变fragment组合。

使用说明

如何创建Fragment

  1. 为Fragment定义一个布局
  2. 定义类继承Fragment
  3. 重写类中的onCreateView方法,返回一个View对象作为当前Fragment的布局。

fragment第一次绘制它的用户界面的时候,系统会调用onCreateView()方法。为了绘制fragment的UI,此方法必须返回一个作为fragment布局的根的view。如果fragment不提供UI,可以返回null。

public class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_example, null);
    return view;
}
}

如何将Fragment添加到Activity
Activity必须在清单文件中进行声明,但是Fragment不需要,Fragment只需要在Activity的布局文件中声明就可以了。

<fragment 
    android:id="@+id/fmt_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:name="com.gunther.fragment.exampleFragment"
    />

当系统创建这个activity layout时,它实例化每一个在layout中指定的Fragment,并调用它们的onCreateView()方法,来获取每一个Fragment的layout,系统将从Fragment返回的View 直接插入到<fragment>元素所在的地方。

每一个fragment都需要一个唯一的标识,如果activity重启,系统可以用来恢复Fragment,并且可以用id来捕获Fragment来处理事务,例如移除它。
有3种方法来为一个fragment提供一个ID,具体如下所示:

  1. 为android:id属性提供一个唯一ID;
  2. 为android:tag属性提供一个唯一字符串;
  3. 如果以上2个你都没有提供,系统将使用容器view的ID;

如何切换Fragment
要在activity中管理Fragment,需要使用FragmentManager可以通过调用activity的getFragmentManager()取得它的实例。
案例:点击不同的按钮切换到不同的Fragment进行显示。具体实现步骤:

  1. 设置布局文件:添加三个按钮用于切换Fragment,并在按钮下方添加一个FrameLayout用来替换成响应的Fragment。
  2. 创建三个Fragment,SportsFragment、NewsFragment、GameFragment。
    public class SportsFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_sports, null);
        return view;
    }
    }

其余两个Fragment跟SportsFragment代码一致,只是布局文件不同。

  1. 添加切换Fragment的逻辑,这个是新闻频道按钮的点击事件

    public void news(View view){
     //获取Fragment管理器对象
     FragmentManager manager = getFragmentManager();
     //开启事务
     FragmentTransaction transaction = manager.beginTransaction();
     //将FrameLayout控件替换成Fragment对象
     transaction.replace(R.id.frame, new NewsFragment());
     //提交事务
     transaction.commit();
    }
    

    sports()法,games()法同上

Fragment的生命周期

Fragment的生命周期和activity生命周期很像,其生命周期方法如下所示。

  1. onAttach:绑定到activity
  2. onCreate:创建fragment
  3. onCreateView: 创建fragment的布局
  4. onActivityCreated: activity创建完成后
  5. onStart: 可见, 不可交互
  6. onResume: 可见, 可交互
  7. onPause: 部分可见, 不可交互
  8. onStop:不可见
  9. onDestroyView: 销毁fragment的view对象
  10. onDestroy: fragment销毁了
  11. onDetach: 从activity解绑了
fragment lifecycle|center
上一篇下一篇

猜你喜欢

热点阅读