尊重他人劳动成果,转载请说明出处: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不显示内容的更多相关文章

  1. 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

    重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到Surfa ...

  2. Fragment之间通过add切换时的显示与隐藏

    新手,不知道用什么方法实现 ,通过动态的方法显示了Fragment   A,在这个里面点击列表项时add方法动态加载Fragment  B,但是两者都会一起显示,重叠在一起了,如果用replace方法 ...

  3. [Android Pro] Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

    方法一.在Activity的onCreate中添加如下代码 getWindow().setFormat(PixelFormat.TRANSLUCENT); reference to :  http:/ ...

  4. 例题:打印乘法口诀。可能大家一看有点难,但只要理解for 循环嵌套,两层循环,外层循环行数,里层循环列数,搞清楚行数和列数之间的关系,就可以轻松做出这道题

    namespace 打印乘法口诀{    class Program    {        static void Main(string[] args)        {            f ...

  5. anglar JS使用两层ng-repeat嵌套使用,分辨$index

    使用ng-init给首层的每个元素赋值一个独立的值. ng-init="outerIndex = $index;" HTML: <div class="catego ...

  6. 两层fragment嵌套时出现空白,(收藏别人的)

    完美解决 两层Fragment,内层空白 转载:http://blog.csdn.net/bingospunky/article/details/51352400 目录(?)[+] 前言 两层Frag ...

  7. 两层嵌套的JSON包的解法

    由于后台的变态,有时候会出现两层甚至多层嵌套的JSON包. 一层的很好解,而且我看过一些比较大的网站新闻接口返回的JSON包也仅仅是一层的. 比如下图所示一层的包 代码也很简单直观 dict = [d ...

  8. Activity嵌套多个Fragment实现横竖屏切换

    一.上图 二.需求 最近项目遇到个横竖屏切换的问题.较为复杂.在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.当中竖屏FP1与FP2能够切换为 ...

  9. 实现Fragment 切换时不重新实例化

    以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...

随机推荐

  1. php中的NOTICE 的错误解决方法

    PHP新手NOTICE错误,特此写给那些遇到和我一样错误的朋友.   刚学习PHP,不久 最近在整留言板,刚才遇到个问题. 页面中,好多类似 Notice: in D:\wamp\www\study\ ...

  2. python中os模块的常用接口和异常中Exception的运用

    1.os.path.join(arg1, arg2) 将arg1和arg2对应的字符串连接起来并返回连接后的字符串,如果arg1.arg2为变量,就先将arg1.arg2转换为字符串后再进行连接. 2 ...

  3. Silverlight中在MVVM模式下对DatagridRow选择控件封装

    在项目中,凡是涉及到表格的地方用的最多的控件,自然少不了DataGrid的身影,它明了的展示各种数据让人十分喜欢.现在要实现一个功能,使DataGrid具有全选和项选中的功能,如果在传统后台代码中完成 ...

  4. 实现Word的列表样式

    1.创建列表,但是不要求在文档视图中显示的层级列表 1)首先是要先把层级建立好,然后选中要编号文字.开始->段落->多级列表,选择一个列表样式,会默认所有的编号文字都是一级: 2)选择&q ...

  5. C#与C++的几个不同之处知识点

    1.索引器 索引器是C#自创的内容,这是C++当中没有的内容,所以做一次笔记. 索引器是用于书写一个可以通过使用[]想数组一样直接访问集合元素的方法.我们只需要指定待访问实例或元素的索引.索引器的语法 ...

  6. Rails中的测试RSpec升级遇到的问题

    bundle exec rspec spec/ /home/wuxj/Prac/rrprac/sample_app/spec/spec_helper.rb::in `block in <top ...

  7. HJA的异或值

    HJA的异或值 查看 提交 统计 提问 总时间限制:  20000ms 内存限制:  512000kB 描述 形态形成场(Morphogenetic Field)假说是Rupert Sheldrake ...

  8. ping命令找不到

    重装系统后安装JDK了,网络一直不好,我ping了下,结果显示ping不是内部或者外部命令,在谷歌里百度了下,在环境变量的path后加上“;C:\Windows\System32”即可,果然有效哦. ...

  9. JENKINS的远程API调用,然后用PYTHON解析出最新的版本及稳定成功的版本

    这个功能,我觉得在作自动作部署时,是可以派上用处的. 记录一下. import urllib f = urllib.urlopen('http://jenkinsurl/job/job_name/ap ...

  10. Class.forName()的理解

    转自:http://blog.csdn.net/yanwushu/article/details/7574713 使用jdbc方式连接数据库时会使用一句代码Class.forName(String c ...