首页 > 其他 > 详细

Fragment的添加、删除问题

时间:2015-10-10 19:56:33      阅读:1233      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!