Android学习|探究碎片Fragment

《第一行代码》系列读书笔记

Fragment简介
Fragment生命周期
Fragment的使用方式
Fragment与Activity之间进行通信


1.Fragment简介

  • 碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。

    学习Fragment的时候可以联系之前学习过的Activity,因为它们有很多相似点:都可包含布局,有自己的生命周期,Fragment可看似迷你活动,它可作为Activity界面的组成部分,可在Activity运行中实现动态地加入、移除和交换。一个Activity中可同时出现多个Fragment,一个Fragment也可在多个Activity中使用。

2.Fragment生命周期

  • 在这里插入图片描述

    onAttach():当Fragment和Activity建立关联时调用
    onCreateView():当Fragment创建视图时调用
    onActivityCreated():当与Fragment相关联的Activity完成onCreate()之后调用
    onDestroyView():在Fragment中的布局被移除时调用
    onDetach():当Fragment和Activity解除关联时调用

    Activity的FragmentManager负责调用队列中Fragment的生命周期方法,只要Fragment的状态与Activity的状态保持了同步,托管Activity的FragmentManager便会继续调用其他生命周期方法以继续保持Fragment与Activity的状态一致

    Fragment生命周期与Activity生命周期的一个关键区别就在于,Fragment的生命周期方法是由托管Activity而不是操作系统调用的。Activity中生命周期方法都是protected,而Fragment都是public。

3.Fragment的使用方式

  • (1)静态加载:

    第一步:新建.xml,为Fragment指定一个布局。

    第二步:新建一个Fragment类并继承Fragment,然后重写onCreateView()方法,这个方法里通过LayoutInflater的inflate()方法将刚刚定义的布局加载进来并得到一个View,再return这个View。

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.another_right_fragment, container, false);
            return view;
        }
    

    第三步:新建.xml,作为Activity的布局,使用<
    fragment>标签添加碎片,并且一定要有android:name属性且值为被加载的Fragment类的包名.类名完整形式。

    <fragment
            android:id="@+id/left_fragment"
            android:name="com.example.fragmenttest.LeftFragment"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    

    第四步:在MainActivity中加载main布局。现在MyFragment就完成了静态加载到MainActivity中,这时碎片里的控件自然也是活动的一个部分。

  • (2)动态加载
    第一步,创建待添加的碎片实例。

    第二步,先用getFragmentManager()方法获取一个FragmentManager对象。

    第三步,开启一个事务,通过beginTransaction()获取一个FragmentTransaction的实例。

    第四步,向容器内添加或替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例。

    第五步:提交事务,调用beginTransaction.commit()提交。

       private void replaceFragment(Fragment fragment) {
               FragmentManager fragmentManager = getSupportFragmentManager();
               FragmentTransaction transaction = fragmentManager.beginTransaction();
               transaction.replace(R.id.right_layout, fragment);
               transaction.addToBackStack(null);//模拟返回栈
               transaction.commit();
           }
    
  • 限定符(Qualifiers)
    在这里插入图片描述
    在这里插入图片描述
    最小宽度限定符允许我们对屏幕的宽度制定一个最小值(以dp为单位),然后以这个最小值为临界点,屏幕大于这个值就加载一个布局,小于这个值就加载另一个布局。

4.Fragment与Activity之间进行通信

  • 在活动中可以通过调用FragmentManager的findFragmentById()方法来得到相应碎片的实例,继而可以调用碎片里的方法。
    如果想得到静态加载碎片的实例,可使用

    getFragmentManager(). findFragmentById();
    

    如果想得到动态加载碎片的实例,代码如下:

    fragmentManager(). findFragmentById();
    

    在碎片中也可以通过调用getActivity()方法来得到和当前碎片相关联的活动实例,进而调用活动里的方法

    MainActivity activity=(MainActivity)getActivity();
    

    于是碎片和活动可以很方便地进行通信了。再想一想碎片和碎片之间如何进行通信?先在一个碎片中可以得到与它相关联的活动,然后再通过这个活动去获取另外一个碎片的实例,这样实现了不同碎片之间的通信了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值