尊重他人劳动成果,转载请说明出处: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. 转:靠谱的代码和DRY

    http://www.cppblog.com/vczh/archive/2014/07/15/207658.html 靠谱的代码和DRY 上次有人来要求我写一篇文章谈谈什么代码才是好代码,是谁我已经忘 ...

  2. HashMap遍历,推荐使用entrySet()

    之前map遍历,偶尔会先去keyset然后再遍历keyset 比如 Map map = new HashMap(); Iterator it = map.keySet().iterator(); wh ...

  3. [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】

    题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...

  4. 网站性能优化— WebP 全方位介绍

    谈到优化网站性能时,主要目标之一就是减少要发送到浏览器的数据量(即 payload).而当前,图片通常是页面构成中最耗费流量的部分,因此降低图片的大小是一个最为有效的优化网页前端性能的办法. 有很多工 ...

  5. 精确到时分秒的jQuery插件例子

    demo.html: <!DOCTYPE html> <html> <head>  <meta http-equiv="Content-Type&q ...

  6. 《Apache Spark源码剖析》

    Spark Contributor,Databricks工程师连城,华为大数据平台开发部部长陈亮,网易杭州研究院副院长汪源,TalkingData首席数据科学家张夏天联袂力荐1.本书全面.系统地介绍了 ...

  7. mysql排序,可以对统计的数据进行排序

    sql SELECT a.*,b.name as address_name,b.tel as address_tel,b.province as address_province,b.city as ...

  8. [LeetCode#265] Paint House II

    Problem: There are a row of n houses, each house can be painted with one of the k colors. The cost o ...

  9. 转 @RenderBody()和@RenderSection()

    强大的Razor引擎 一.Razor基础简介 Razor采用了cshtml后缀的文件名,截图如下: A. 版面布局 从图上看到,新的视图引擎已经没有了Site.Master这种MasterPage了, ...

  10. (转载)mysql书籍

    (转载)http://blog.csdn.net/symdfbb/article/details/7636332 MySQL技术内幕 mysql使用大全,可以说方方面面都包括了.认真研读大概一本就差不 ...