安卓开发之详解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()了。
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
安卓开发之详解getChildFragmentManager和getsupportFragmentManager和getFragmentManager详解的更多相关文章
- Eclipse+ADT+Android SDK 搭建安卓开发环境
Eclipse+ADT+Android SDK 搭建安卓开发环境 要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位); eclipse-jee-luna-SR2 ...
- 关于安卓开发的学习一:webview
在网上看到几篇不错的博客,分享和学习一下! Android使用WebView加载网页 https://blog.csdn.net/tuke_tuke/article/details/51684254 ...
- 基于eclipse-java的平台上搭建安卓开发环境
首先感谢好人的分享!http://www.mamicode.com/info-detail-516839.html 系统:windows 7 若想直接安装eclipse—android的,请启动如下传 ...
- Android Studio 1.0.1 + Genymotion安卓模拟器打造高效安卓开发环境
我们开发安卓大多是使用Eclipse和安卓SDK中自带的安卓模拟器.当然,Google早就推出了自己的安卓开发环境——Android studio,在不久前,Google发布了Android Stud ...
- 安卓开发第一步:Android Studio安装配置
虽然本人是JAVA开发工程师平时主要开发Web App,但因为项目需求需要开发对应的移动端.一时又找不到合适的安卓开发人员,兄弟我只好被项目经理"抓来当壮丁了".俗话说好" ...
- monkeyrunner之安卓开发环境搭建(一)
在学习monkeyrunner之前,让我们先搭建好eclipse安卓开发环境. 对于程序开发人员而言,eclipse并不陌生,它提供了一个非常广阔的平台来开发程序.同样也可以用它来开发android程 ...
- 安卓开发笔记——Fragment+ViewPager组件(高仿微信界面)
什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再 ...
- 安卓开发_深入学习ViewPager控件
一.概述 ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view. ViewPager特点: ...
- Kotlin 语言高级安卓开发入门
过去一年,使用 Kotlin 来为安卓开发的人越来越多.即使那些现在还没有使用这个语言的开发者,也会对这个语言的精髓产生共鸣,它给现在 Java 开发增加了简单并且强大的范式.Jake Wharton ...
随机推荐
- 《Windows via C/C++》学习笔记 —— 设备I/O之“同步的设备I/O”(系列文章)
前面曾经讲过,设备I/O的方式有两种:同步和异步.本篇介绍一下同步设备I/O.主要涉及到两个函数:ReadFile和WriteFile. 不要被这两个函数的名称迷惑,不仅可以将这两个作用于文件,也可以 ...
- 怎样让窗口不显示在任务栏和ALT+TAB中(隐藏窗口再嵌套,几乎是万能的办法)
之前想弄个像QQ旋风那样的悬浮窗口,就研究了下怎么让窗口不显示在任务栏中,方法其实很简单就是将窗口的扩张属性设置成WS_EX_TOOLWINDOW,MSDN中对该属性有详细介绍,代码如下: ::Set ...
- Linux编辑器Vim和Emacs入门
sudo 命令 debian系统没有自带,需要安装: apt-get install sudo 安装位置为 /usr/bin/sudo,对应配置文件为 /etc/sudoers sudoers授权格式 ...
- 30+ 强大的Buddypress主题–开始您的社区站点吧
BuddyPress起源于2008年,当时设计者设想添加社交网络功能到WordPress多用户版本中.第一个正式稳定版本的发布是在2009年的5月.自从那时起.BuddyPress开始快速的成长和演变 ...
- Hibernate注解(一):基本注解
在Hibernate中使用注解,主要是为了替代映射文件,完成“类到表,属性到字段”的映射.JPA提供了一套功能强大的注解.Hibernate直接使用了JPA的这套注解.当然,对于JPA中的一些不足,H ...
- python列表和字典的迭代
1.列表和字典的迭代 程序开发中,对列表和字典进行迭代是非常常见的事情. 字典一般可以选择对key进行迭代.对value迭代和对key/value一起迭代 >>> d = {'a': ...
- wed前端html/css简单理解
开发工具: txt文本 / dreamwave:DW(cs6/cc) / Hbuilder / webstorm / sublime / vscode 前端: 知识架构: 3层: 结构 / 表现 / ...
- 使用 Spring Boot Actuator 构建 RESTful Web 应用
Spring Boot Actuator 是 Spring Boot 的一个子项目.通过它,可以很轻易地为应用提供多种生产级服务.本教程中,你将通过构建一个应用来学习如何添加这些服务. 1. 你需要构 ...
- Git--将已有的项目添加到github
(2). 初始化本地仓库,并提交内容到本地 需要先打开 命令行终端,然后通过 cd 命令切换到需要添加到github 的项目的目录下,然后依次执行如下命令, 具体命令及其含义如下: 1). touch ...
- 浅谈C#泛型
一.为什么要提出泛型的概念 我们在声明对象或者方法中,对象中成员变量的定义或者函数参数都传递都要指定具体的对象类型,但是有的时候参数的类型是变化的,但是实现的功能却又差不多,这个时候我们就想,是否存在 ...