Fragment使用感受

由于项目的需要,我需要将我的App设计比较复杂,需要有一个独立的下部菜单,提供最基本的四个大的功能点。同时第一个功能点里面,还需要有3个小的功能点。如图:(总算上图了,晚上写文章用的Mac,白天开发用的是TP,截图不易) 对于这个布局,我主要使用了一个大的空白布局,后面使用Fragment动态的填充所需要的布局文件,这样的好处就是,对于同一个App来说,能够很好的复用代码。 在商城那个按钮里面,又有三个功能点: 由于截图是在Eclipse里面截取的,所以默认情况下,按钮的drawable若配置了选择的xml,通常是以true展现的。 这个界面搭建起来也不是特别的费事(当然这是在我搭建过后才说的话),同样的,需要在这个topbar的下方建立一个Fragment容器,用来加载内容 这里就需要用到Fragment嵌套的知识了。
  • 首先创建main.xml布局,写出底部的菜单,并为其上方留白,进行后期的填充
  • 创建3个Fragment,分别用于去加载自己的业务逻辑,也就是用来替换掉上面的容器
  • 为这3个Fragment创建一个数组,将其添加到定义好的容器里,然后隐藏两个
getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, findFragment)
                .add(R.id.fragment_container, moneyFragment)
                .add(R.id.fragment_container, shopFragment).hide(findFragment)
                .hide(moneyFragment).show(shopFragment).commit();
  • 在按钮事件里,通过逻辑关系,将不同的Fragment显示出来
注意:在进行嵌套Fragment的时候,childFragment需要调用的不是getSupportFramgentManager(),而是getChildFragmentManager() 我在嵌套的时候,遇到了一个很麻烦的问题,就是提示Can't retain fragments that are nested in other fragments,中文大意就是无法在一个fragments里面嵌套另外一个fragments。 为此我搜索了很多的处理办法,但是确实没有一个能适合我的。So 我尝试这在SOF里面发帖求助一下子。虽然接触SOF很久了,也每次就是看看其他人的问题,看看其他高手的答案。今天自己就用那没有过6级的英语,发了一贴。传送门. 果然SOF大神很多,不到10mins,就有一个热心的工程师给我发来Answer。 按照那样的方法,我顺流而上,找到了setRetainInstance(true),但直到现在都还没有很明白为什么这样做就会有效果。摘自CSND上一个网友的文章:
Fragment有一个非常强大的功能——就是可以在Activity重新创建时可以不完全销毁Fragment,以便Fragment可以恢复。在onCreate()方法中调用setRetainInstance(true/false)方法是最佳位置。当在onCreate()方法中调用了setRetainInstance(true)后,Fragment恢复时会跳过onCreate()和onDestroy()方法,因此不能在onCreate()中放置一些初始化逻辑,切忌!
可能随着我开发的不断深入,我会有不一样的认知吧。 还有一个很奇怪的事情,找不到头绪,若有人知道,请帮我解答一下。 在创建childFragment的时候,我声明Fragment数组后,却一直加入不了,自己写的Fragment类的实例,提示说,我写的xxxFragment类型不对,应该改为Fragment。 这我就有一点纳闷了,我写的xxxFragment是extend Fragment的啊?怎么会出现这样的问题呢?而且同样的写法,在我的一级AFragment里,并没有报错。 我自己的阅读了一下代码,发现AFragment里面,我用的是v4包里的Fragment来创建的fragments[]数组,而xxxFragment里面,使用的是android.app里面的。我本着试一试的态度,将xxxFragment import v4包里的Fragment,但是编译器仍旧报错。 最奇怪的是,过了一会,我又可以愉快的导入v4的包,顺利的定义fragments[]数组了。 虽说有点让人摸不到头脑,但毕竟我是知道有这样的原因导致,不知道有人有同样的经历没有,希望能帮助一下我,让我有一个更加深入的认识。 源代码在这里,感兴趣的可以在自己的手机上安装着,看看效果。 To Be Continue~
最近不知道怎么了,各种Bug缠身,而且还是小到离奇,但又很难查出来的隐性Bug。不过也好,让自己也学习了不少的Android调试技巧。 晚上回来,第一件事就是看王自如VS罗永浩,总感觉刘翔,插不上嘴,也看到了罗胖子喋喋不休,回避一些问题的能力。罗胖子永远不让刘翔插嘴,我看着都心急。 让我又想起来,大一那年看的11度青春系列(对!没错,就是横冲出世的《老男孩》),其实里面的几部短片都很有特点,只是大家都被《老男孩》的成功给遮挡了。那一个系列,也诞生出了现在的《泡芙小姐》。 扯得有点远,反正那一年优酷还是给了新一代影像青年一个很广阔的舞台,让他们展示出自己的想法和态度。也不知道现在还有这样的赞助没,可能也是因为自己已经很少主动的去到优酷上面看视频了吧。 在《幸福59厘米之小马》中,罗胖子子9.40多秒的时候出境,开始了他的人生初秀。这里有热心网友截取的片段。 很难想象,老罗为什么抽那么大的力气。为了投入的演戏,我到觉得不像。就我的理解,我是想着他这是想表达一种,在现实生活中,对于当权者制定的一些霸王条款的反抗,而且是如此强烈的反抗。如同明明是小中大三个杯子,却被硬生生的不解人情不断重复洗脑的中大特大。老罗这样的反抗,我们又有谁可以呢? 截取一人一个,我很喜欢的句子结束: * 我是一个不信邪的人----王自如 * 我不是为了输赢,我就是认真----罗永浩