两层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 ...
随机推荐
- Visual c++ 2012 软件错误
vs2012 未能正确加载"Visual C++ Language Manager Package"包 解决办法 如下图所示: 到官网下载更新即可. http://www.micr ...
- Python学习 - 简单抓取页面
最近想做一个小web应用,就是把豆瓣读书和亚马逊等写有书评的网站上关于某本书的打分记录下来,这样自己买书的时候当作参考. 这篇日志这是以豆瓣网为例,只讨论简单的功能. 向服务器发送查询请求 这很好处理 ...
- WPF后台访问XAML元素
当我们需要从后台访问xaml文件时,我们可以通过这样的方式来操作: private void button1_Click(object sender, RoutedEventArgs e) { Sys ...
- java printf与println的区别
Java中的println和printf的区别在于:println是用于输出参数内容,然后换行,其参数个数固定为一个.printf是用于输出带各种数据类型的占位符的参数,其参数个数是不定的.
- 这篇blog只是为了发一张图链到UOJ的博客去..
UOJ卖萌表情,萌萌哒VFK如图.
- cademy的Java习题做后感
在cademy各种语言的hello world也做了不少,好像都差不多,先是数据类型,然后条件语句,之后面向对象,再上几个特殊对象. 以前都没有做笔记,导致ruby做完就忘光了,这次好歹写点什么,比如 ...
- java中如何实现全局变量
有时一个项目中会多处涉及到路径,当你把这个项目移植到别的电脑上时就要一一修改这些路径,过程十分繁琐,所以一个全局变量在这时是必不可少的. 遗憾的是java等oo语言并没有全局变量,这怎么办呢?下面介绍 ...
- eclipse设置字体大小
eclipse是我们常用的开发工具.eclipse中的默认字体往往并不满足我们的需要,我经常要调节一下它的大小或者换一下风格.eclipse中的字体大小怎么改变呢? 工具/原料 eclipse 方法/ ...
- Mongo的导出工具mongoexport介绍
需求介绍:将mongodb中的数据以文件的方式导出:json或cvs格式 mongo 提供了mongoexport的工具,可以实现将库中的数据以json或cvs的格式输出到文件中.mongoexpor ...
- python functools模块
functools.partial 作用: functools.partial 通过包装手法,允许我们 "重新定义" 函数签名 用一些默认参数包装一个可调用对象,返回结果是可调用对 ...