码迷,mamicode.com
首页 > 其他好文 > 详细

Fragment的添加、删除问题

时间:2015-10-10 19:57:44      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

安卓一直在进化,Fragment就是个好东西,如果早5年做安卓开发,真要麻烦的多。

 

关于Fragment的讲解,这里很详尽:

Android Fragment 真正的完全解析(上)

Android Fragment 真正的完全解析(下)

看完后可以进行Fragment的基本功能使用,最广为人知的就是微信主界面的例子了。

 

一般情况下,多个Fragment切换显示不同内容,会使Fragment实例化一个空的FrameLayout界面布局,并且初始化一个Fragment填充该布局。

而我的产品设计并非如此,所以使用时有了问题,通过FragmentManager很好地解决了问题,于此记之。

 

问题描述:

Activity里的FrameLayout非空,有子布局ListView,在点击按钮后调用Fragment填充该FrameLayout,这样ListView就被替换掉,不显示。代码如下:

private FragmentManager frg_mng = getFragmentManager(); //全局变量

FragmentTransaction ft = frg_mng.beginTransaction();

ft.replace(R.id.layout_note_list, mInfo_frg).commit();

ft.replace(R.id.layout_note_list, mUsers_frg).commit();

此时两个Fragment mInfo_frg和mUsers_frg互相切换,那么如何显示Fragment所填充的FrameLayout下的ListView呢?显然要关闭两个Fragment,使用remove()方法可实现。

即:

FragmentTransaction ft = frg_mng.beginTransaction();

ft.remove(mUsers_frg).commit();

ft.remove(mInfo_frg).commit();

但是Fragment移除后,主Activity出错闪退。其原因是定义一次beginTransaction()方法只能commit()提交一次,要关闭两个Fragment,需要定义两个beginTransaction(),即:

FragmentTransaction ft_a = frg_mng.beginTransaction();

FragmentTransaction ft_b = frg_mng.beginTransaction();

ft_a.remove(mUsers_frg).commit();

ft_b.remove(mInfo_frg).commit();

这样,两个Fragment都顺利关闭,不再鸠占鹊巢,原FrameLayout下的ListView自然就能显示了,问题解决。

 

Fragment的添加、删除问题

标签:

原文地址:http://www.cnblogs.com/misybing/p/4867828.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!