zoukankan      html  css  js  c++  java
  • 安卓开发之详解getChildFragmentManager和getsupportFragmentManager和getFragmentManager详解

    安卓开发之详解getChildFragmentManager和getsupportFragmentManager和getFragmentManager详解

    getFragmentManager()所得到的是所在fragment 的父容器的管理器,
    getChildFragmentManager()所得到的是在fragment  里面子容器的管理器。


    getSupportFragmentManager()主要用于支持 3.0以下android系统API版本,3.0以上系统可以直接调用getFragmentManager() ,因为fragment是3.0以后才出现的组件,为了这之前的系统版本也能使用fragment,借助V4包里面的getSupportFragmentManager()方法来间接获取FragmentManager()对象,3.0版本之后,有了Fragment的api,就可以直接使用getFragmentManager()这个方法来获取对象。
    


    容易出现bug的地方


    1.Fragment嵌套Fragment要用getChildFragmentManager

    (1)问题重现

    1>Fragment放ViewPager,ViewPager里面是fragment。第一次进入没问题,再次进入ViewPager的fragment时里面内容就没了,数据丢失

    2>Fragment低频率点击切换不会发生问题,过快点击马上崩溃

    3>错误:Java.lang.IllegalArgumentException:No view found for id for fragment

    3>调用fragment的replace方法不走onDestroy()、onDestroyView()方法,无法销毁fragment

    4>在fragment中写倒计时,每次切换后倒计时越来越快的问题


    (2)解决方案

    FragmentManager childFragmentManager = getChildFragmentManager();
    ViewPager_Adapter viewPager_adapter = new ViewPager_Adapter(childFragmentManager, fragments);    //FragmentPagerAdapte
    

    getFragmentManager到的是activity对所包含fragment的Manager,而如果是fragment嵌套fragment,那么就需要利用getChildFragmentManager()了。


    getFragmentManager()所得到的是所在fragment 的父容器的管理器,
    getChildFragmentManager()所得到的是在fragment  里面子容器的管理器。


    getSupportFragmentManager()主要用于支持 3.0以下android系统API版本,3.0以上系统可以直接调用getFragmentManager() ,因为fragment是3.0以后才出现的组件,为了这之前的系统版本也能使用fragment,借助V4包里面的getSupportFragmentManager()方法来间接获取FragmentManager()对象,3.0版本之后,有了Fragment的api,就可以直接使用getFragmentManager()这个方法来获取对象。
    


    容易出现bug的地方


    1.Fragment嵌套Fragment要用getChildFragmentManager

    (1)问题重现

    1>Fragment放ViewPager,ViewPager里面是fragment。第一次进入没问题,再次进入ViewPager的fragment时里面内容就没了,数据丢失

    2>Fragment低频率点击切换不会发生问题,过快点击马上崩溃

    3>错误:Java.lang.IllegalArgumentException:No view found for id for fragment

    3>调用fragment的replace方法不走onDestroy()、onDestroyView()方法,无法销毁fragment

    4>在fragment中写倒计时,每次切换后倒计时越来越快的问题


    (2)解决方案

    FragmentManager childFragmentManager = getChildFragmentManager();
    ViewPager_Adapter viewPager_adapter = new ViewPager_Adapter(childFragmentManager, fragments);    //FragmentPagerAdapte
    

    getFragmentManager到的是activity对所包含fragment的Manager,而如果是fragment嵌套fragment,那么就需要利用getChildFragmentManager()了。


    原文链接:链接大神》》》http://blog.csdn.net/allan_bst/article/details/64920076

  • 相关阅读:
    MySQL-DQL查询语句的其他方法查询
    MySQL-SQL的分类以及基本的操作
    1-1-4-2 Java se-常量&变量-作用域
    1-1-4-1 java se-常量&变量-基本数据类型
    1-1-2-1 java se-helloworld原理—java代码的编译和运行逻辑
    1-1-1-2 Java se-java运行环境-jvm虚拟机的跨平台性以及和jdk,jre之间的关系
    1-1-1-1 java se-java运行环境-基本单位bit和Byte
    递归
    Ultra-QuickSort (POJ 2299)树状数组+离散化
    Color the ball(HDU1556)树状数组
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154448.html
Copyright © 2011-2022 走看看