继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

fragment界面重叠问题的解决

桃花长相依
关注TA
已关注
手记 113
粉丝 15
获赞 56

原因:为什么会出现界面重叠呢?因为每当我们离开Activity的时候,切换到别的APP的时候,当内存不够用,Fragment所在Activity被销毁,会调用onSaveInstanceState()方法,Fragment都会被保存起来,当我再次回到这个app的时候,通过onCreate中的参数savedInstanceState恢复了之前的fragment,就导致了界面重叠。

  解决办法:

  • 1.在进入onCreate函数时,先去判断savedInstanceState是否为null,如果不为null,则表示里面有保存这个fragment。则不再重新去add这个fragment,而是通过Tag从前保存的数据中直接去读取,看一下代码:

public void onCreate(Bundle savedInstanceState) {  
    fManager = getFragmentManager();  
    if (savedInstanceState != null) {  
        fg1 = (AllOfficialAccountFragment) fManager.findFragmentByTag("fg1");  
        fg2 = (MovieOfficialAccountFragment) fManager.findFragmentByTag("fg2");  
        fg3 = (NewsOfficialAccountFragment) fManager.findFragmentByTag("fg3");  
        fg4 = (OtherOfficialAccountFragment) fManager.findFragmentByTag("fg4");           
    }  
    super.onCreate(savedInstanceState);       
}
实例代码:设置Tag的代码:
transaction.add(R.id.fragment_main, personalFragment,"person");
transaction.add(R.id.fragment_main, homeFragment,"home");
transaction.add(R.id.fragment_main, messageFragment,"message");
onCreate()方法中:
if(savedInstanceState!=null){
    personalFragment= (PersonalFragment) fragmentManager.findFragmentByTag("person");
    homeFragment= (HomeFragment) fragmentManager.findFragmentByTag("home");
    messageFragment= (MessageFragment) fragmentManager.findFragmentByTag("message");
}

原文链接:http://www.apkbus.com/blog-813041-62913.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP