AS 升级后新建 Fragment 时,两个 Fragment 重叠或同一页面内切换问题的解决方法

前记

这是一篇很久之前的笔记,最近整理了一下,写篇文章纪录下来。Android Studio 版本最近升级频繁,到目前最新版本是2.1,变化不大,但2.0版本还是有很多的提升。但是相对之前1.0.x或1.5.x版本,AS 在布局和新建工程模板的时候有些变化,尤其是新建 Fragment 时,可能会出现页面内 Fragment 不显示、两个 Fragment 重叠在同一页面内跳转等问题。下面是我的解决方法,供大家参考。

步骤

  1. AS 版本升级后没有 Blank Activity with Fragment 模板了,取而代之的是 Blank 和 Empty。我们可以选择 Blank Activity,然后如下,打钩:
    http://7xsosy.com1.z0.glb.clouddn.com/1.png

  2. 生成的工程目录如下(包括后面新建的 AnotherFragment),从代码以及注释可知类 PlaceHolderFragment 和 MainActivityFragment 是一样的,删除前者保留后者即可:
    http://7xsosy.com1.z0.glb.clouddn.com/2.png

  3. 红色框内代码必须手动加上,分析代码可知为启动并显示 Fragment,否则不能显示:
    http://7xsosy.com1.z0.glb.clouddn.com/3.png

  4. 修改 MainActivityFragment.java 文件,把如下红线处 container 换成 fragment,由第5步可知标签的id 是 fragment,不再是 container,否则会提示 container 不存在:
    http://7xsosy.com1.z0.glb.clouddn.com/4.png

  5. content_main 布局文件中把标签换成 FrameLayout,name 属性加或不加没有影响:
    http://7xsosy.com1.z0.glb.clouddn.com/5.png

  6. 至此,不会出现 Fragment 不显示、两个Fragment重叠同一个页面切换的问题了:
    http://7xsosy.com1.z0.glb.clouddn.com/6.png

后记

通常习惯上界面切换用 Activity,但同一个应用程序内部界面切换的话再用 Activity 就不太合适了,因为 Activity 是一个比较重量级的基本组件。此时,用 Fragment 来代替就比较好,因为 Fragment 轻量级而且灵活。尤其在动画 UI 方面,Fragment 应用十分广泛。

今天是五一假期最后一天,还有好几个电话没打,对于到处都人山人海的景点并没有出行计划,只想在家安静地看书学习。没想到好好的五一假期被百度给恶心到了,对于 魏则西事件 不想多说了,这里就引用著名程序员霍矩先生的妻子西乔女士的一段话吧:「百度控制着普通人接触信息时代的入口,却把路标指向邪恶欺骗的世界。它让人们对互联网世界失去信任、对技术失去尊重、在使用这个时代最先进的知识/信息获取方式时感到恐惧。加剧了信息占有乃至智识上的不平等。这种对弱势群体对普通大众的经年累月的作恶,是最深的恶。」

Don’t be evil.