美文网首页
Fragment详解

Fragment详解

作者: Skypew | 来源:发表于2017-11-08 09:24 被阅读19次

推荐腾讯官方的一篇文章
https://mp.weixin.qq.com/s/dUuGSVhWinAnN9uMiBaXgw

1.第五大组件

(1). 原因

fragment 不属于四大组件,有自己的生命后期,动态灵活的加载到activity中,并不是完全独立,需要依赖activity

节约内存,ui切换效果更加舒适

(2).加载Activity的2种方式

静态加载
fragment 直接写入 xml 文件中

动态加载
使用FragmentManager来管理

(3). FragmentPagerAdapter 与 FragmentStatePagerAdapter

FragmentPagerAdapter 适用于页面较少的情况

源码中进行的 detach操作 ,只是UI脱离,并没有释放内存

源码

FragmentStatePagerAdapter viewPager切换时适用于页面较多的情况 ,

源码

源码中进行了remove Fragment 操作 释放了内存

2.生命周期

image.png

结合activity


image.png

这个图的生命周期暂不确定


image.png

3.fragment之间的通信

a). 在fragment 中调用 activity中方法

  • getActivity()
  • fragment向activity 中传数据 使用接口
首先,在Fragment中定义接口,并让Activity实现该接口(具体实现省略):
public interface OnFragmentInteractionListener {    void onItemClick(String str);  //将str从Fragment传递给Activity}

在Fragment的onAttach()中,将参数Context强转为OnFragmentInteractionListener对象:
public void onAttach(Context context) {
    super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
                throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

并在Fragment合适的地方调用mListener.onItemClick("hello")将”hello”从Fragment传递给Activity

b).在Activity 中调用fragment中的方法

  • 获取Fragment对象,并调用Fragment的方法
Fragment中定义方法:
public void setString(String str) { 
    this.str = str;
}

并在Activity中调用fragment.setString("hello")即可。

  • 可以同样使用接口

c). Fragment之间通信

由于Fragment之间是没有任何依赖关系的,因此如果要进行Fragment之间的通信,建议通过Activity作为中介,不要Fragment之间直接通信。

可以先 getActivity()来获取 activity ,在通过 findFragmentById() 来获取另一个fragment

3.FragmentManager管理器

Fragment 的 replace 、add 、remove 方法
FragmentTransaction有一些基本方法,下面给出调用这些方法时,Fragment生命周期的变化:

  • add(): onAttach()->…->onResume()。
  • remove(): onPause()->…->onDetach()。
  • replace(): 相当于旧Fragment调用remove(),新Fragment调用add()。
  • show(): 不调用任何生命周期方法,调用该方法的前提是要显示的Fragment已经被添加到容器,只是纯粹把Fragment UI的setVisibility为true。
  • hide(): 不调用任何生命周期方法,调用该方法的前提是要显示的Fragment已经被添加到容器,只是纯粹把Fragment UI的setVisibility为false。
  • detach(): onPause()->onStop()->onDestroyView()。UI从布局中移除,但是仍然被FragmentManager管理。
  • attach(): onCreateView()->onStart()->onResume()。

相关文章

  • Android 你需要掌握的知识(三)

    目录 一.Fragment详解 一.Fragment基础 1.Fragment Fragment为什么会出现,它其...

  • 碎片之Fragment详解

    一、Fragment详解 onAttach:Fragment和Activity建立关联时调用 onCreate:F...

  • Fragment使用三部曲

    1.Fragment进阶 - 基本用法2.Fragment进阶-FragmentTransaction详解3.Fr...

  • fragment

    fragment详解一 1.Fragment有自己的生命周期 2.Fragment依赖于Activity 3.Fr...

  • 2.2基础知识-Fragment

    Fragment详解 一.Fragment为什么被称为第五大组件?(Activity、Service、Conten...

  • Fragment-基础梳理

    网上很多关于Fragment 的基础详解,Fragment 对于我们也不陌生了,今天来整理一下Fragment的用...

  • 「转载」Tablayout+ ViewPage + Fragme

    Tablayout + ViewPage + Fragment详解 昨天用到tablayou+viewpage嵌套...

  • Android Fragment详解

    参考网址:Android Fragment详解[https://blog.csdn.net/qq_37982823...

  • Fragment详解

    一、动态添加碎片的步骤1.创建待添加的碎片实例。2.获取FragmentManager,在活动中可以直接通过调用g...

  • Fragment详解

    1、Fragment为什么被称为第五大组件1)为什么有自己的生命周期,可以灵活加载Activity,但生命周期依附...

网友评论

      本文标题:Fragment详解

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