标签:
安卓一直在进化,Fragment就是个好东西,如果早5年做安卓开发,真要麻烦的多。
关于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自然就能显示了,问题解决。
标签:
原文地址:http://www.cnblogs.com/misybing/p/4867828.html