两层Fragment嵌套,外层Fragment切换时内层Fragment不显示内容
尊重他人劳动成果,转载请说明出处:http://blog.csdn.net/bingospunky/article/details/46847269
需求
在搭界面有这么样一个需求:须要两层的Fragment嵌套,内层须要滑动切换效果,外层界面不须要滑动效果。
那么内层使用ViewPager切换,外层就使用replace切换。这样搭出来的界面不能得到须要的效果,内层的Fragment仅仅有第一次能显示内容。之后切换外层Fragment时。内层Fragent都是空着的。
我再尝试两层Fragment都使用replace切换,这样就能达到效果了。可是项目里须要内层须要滑动切换的效果。对于这种情况能够略微改动一下需求,取消内层滑动效果的需求就ok了。可是作为一个求甚解的人,我还是想尝试一下实现内层滑动效果。那么怎么实现呢?
show and hide
在切换外层Fragment时使用的是replace。被切换掉的Fragment的生命周期函数会运行到onDestroy。
我推測内层的Fragment空着是由于被切换掉到Fragment在运行onDestroy函数时,对FragmentManager做了一些不可告人的事情导致的。那么我们能够选择不运行onDestroy的方式切换。那么就选择show/hide进行切换外层Fragment。这个方式是可行的可是会产生一个新的问题。
当进程被杀死以后
比方一个activity已经add了4个Fragment,我们在切换的时候使用show/hide切换。假设这个时候按home键返回桌面。在之后的一段时间里,由于内存的原因。这个应用的进程被系统杀死了,然后我们通过长按home键回到这个应用。那么系统会创建一个新的activity给我们。在系统创建的新的activity里。不能非常好的还原刚才已经add的4个Fragment。在界面里还是会有4个Fragment(假设Fragment没有背景色,那么这4个Fragment会重叠在一起),而且切换事件也不响应。那么我们怎么解决问题呢?首先我们要对这个问题进行定性,当我们给activity加入多个Fragment且该应用被系统杀死后又一次创建时,多个Fragment会出现异常。
当我们出现这样的情况时,能够finish掉这个activity。由于这样的情况非常少出现。所以问能够finish这个activity。
最后
这篇文章仅仅是介绍了我遇到的两层Fragment嵌套的问题,以及我解决这个问题的表面现象。刚才我也尝试了一下去读Fragment的源代码,可是还没有进展。在接下来的时间我会阅读这部分的源代码,然后从源代码到角度找到上面两个问题(1.两层Fragment切换时。为什么内层Fragment不显示?2.activity被系统杀死。又一次生成时,为什么Fragmant会重叠且不响应切换?)的原因,就像我前面的从源代码角度解决这个问题一样。
最后的最后
转眼,已经凌晨四点半了,凌晨四点半的五道口非常安静。非常美。
两层Fragment嵌套,外层Fragment切换时内层Fragment不显示内容的更多相关文章
- 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到Surfa ...
- Fragment之间通过add切换时的显示与隐藏
新手,不知道用什么方法实现 ,通过动态的方法显示了Fragment A,在这个里面点击列表项时add方法动态加载Fragment B,但是两者都会一起显示,重叠在一起了,如果用replace方法 ...
- [Android Pro] Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
方法一.在Activity的onCreate中添加如下代码 getWindow().setFormat(PixelFormat.TRANSLUCENT); reference to : http:/ ...
- 例题:打印乘法口诀。可能大家一看有点难,但只要理解for 循环嵌套,两层循环,外层循环行数,里层循环列数,搞清楚行数和列数之间的关系,就可以轻松做出这道题
namespace 打印乘法口诀{ class Program { static void Main(string[] args) { f ...
- anglar JS使用两层ng-repeat嵌套使用,分辨$index
使用ng-init给首层的每个元素赋值一个独立的值. ng-init="outerIndex = $index;" HTML: <div class="catego ...
- 两层fragment嵌套时出现空白,(收藏别人的)
完美解决 两层Fragment,内层空白 转载:http://blog.csdn.net/bingospunky/article/details/51352400 目录(?)[+] 前言 两层Frag ...
- 两层嵌套的JSON包的解法
由于后台的变态,有时候会出现两层甚至多层嵌套的JSON包. 一层的很好解,而且我看过一些比较大的网站新闻接口返回的JSON包也仅仅是一层的. 比如下图所示一层的包 代码也很简单直观 dict = [d ...
- Activity嵌套多个Fragment实现横竖屏切换
一.上图 二.需求 最近项目遇到个横竖屏切换的问题.较为复杂.在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.当中竖屏FP1与FP2能够切换为 ...
- 实现Fragment 切换时不重新实例化
以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...
随机推荐
- OnClose()和 OnDestroy()
OnClose()和 OnDestroy() 基于对话框的MFC程序,发现每次程序退出时,托盘的小图标不能自动消失,鼠标移上去之后才能消失,比较不爽. 后来发现我删除这个图标的代码是在自己重写的OnC ...
- yii2的安装使用
一.Yii2框架 Yii2框架有基本和高级两种版本,主要区别是高级版已经分好了前台.后台,基本版只有前台 二.归档安装方法 归档安装方发很简单,只需要在官网上下载归档文件后,解压即可使用(但是不使用c ...
- 【C语言】printf函数详解
C语言printf函数详解 一.相关基础知识 请求printf()打印变量的指令取决于变量的类型,例如打印整数用%d符号,打印字符用%c符号,这些符号称为转换说明(conversion specifi ...
- Linux脚本(二)
1.for循环以及加法的使用 portStr=`lsof -i:56801 | head -2`count=0for str in `lsof -i:56801 | head -2`do ((coun ...
- Win7 64位系统U盘安装Centos6.5双系统
(win764位旗舰版系统 Centos6.5亲测成功) 安装前准备: U盘.软碟通(UltraISO).CentOS-6.5-x86_64-bin-DVD1(DVD 2只是一些软件,安装系统只要DV ...
- gitweb安装
gitweb安装: 1. 简介 Gitweb提供了git版本库的图形化web浏览功能.可以到网站http://git.kernel.org/体验下效果,如下图所示. Gitweb界面 它既可以通过配置 ...
- Say To ME
每天都要有计划,无计划不生活. 计划包括天计划和月计划. 每个月应该有月主题. 避免大概,可能,貌似,等不肯定的词语.增强自信心,增强给别人的自信心. 不熬夜,早睡. 多运动,每周应该至少出门一次,运 ...
- ORA-00313错误 及其 解决方法
ORA-00313: open failed for members of log group 1 of thread 1 ORA-00312: online log 1 thread 1: 'D:\ ...
- unity3d 制造自己的水体water effect(一)
first,I wish you a happy new year, and study in spring festival’s eve means you are hardworking,haha ...
- windows下protobuf jar包的编译
0.如果你不想手动编译生成,请直接跳到最后下载附件. 1.下载protobuf release版本:https://github.com/google/protobuf/releases,protoc ...