美文网首页Android知识移动开发
Android开发:Fragment生命周期概述

Android开发:Fragment生命周期概述

作者: Gunther | 来源:发表于2016-12-14 12:09 被阅读579次
    • 2016年12月8日,Google中国开发者大会在京举行,同时正式上线了Google中国开发者网站Google Developers,查看官方学习资源再也不用爬梯子了
    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

    相关文章

      网友评论

        本文标题:Android开发:Fragment生命周期概述

        本文链接:https://www.haomeiwen.com/subject/nreimttx.html