美文网首页
使用fragment导致页面错乱重叠

使用fragment导致页面错乱重叠

作者: eliteTyc | 来源:发表于2019-04-02 21:37 被阅读0次
    • 记使用碎片fragment时,造成页面错乱,重叠显示

    原因

    • 使用fragment时,为了防止重复replace,导致fragment每次都重新创建,重新获取数据,导致不必要的流量损失,所以一般使用hide和show来实现,但是这样会带来一个问题,就是当页面奔溃,然后自动打开当前主页面时,会发现几个不同的fragment页面错乱重叠了,或者在进行分屏时,也会出现这种情况。

    解决办法

    • 之前看见别人的一篇博客,我忘记了是谁的博客,这里在记录一下,完全没有侵权的意思,如有冒犯,请正主留言我加上博客地址。
    • 解决方案:
      • 1.在存放fragment的Activity中的onSaveInstance方法中进行保存当前选中的fragment信息
    @Override
        public void onSaveInstanceState(Bundle outState) {
            outState.putInt("nowSelectedPage",index);
            super.onSaveInstanceState(outState);
        }
    
    -  注解:在outState这个bundle中保存当前选中的页面信息,存放key——value值
    
    • 2.在存放fragment的Activity中的onCreate方法中判断savedInstanceState是否为空,如果不为空,说明上次是错误关闭页面,保存了选中的页面信息
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            pages = new HashMap<>();
            super.onCreate(savedInstanceState);
            fragmentManager = getSupportFragmentManager();
            if (savedInstanceState != null) {
                 //读取上一次界面Save的时候tab选中的状态,默认是选中第一个
                lastIndex=savedInstanceState.getInt("nowSelectedPage",0);
                pages.put(PageEnum.HOME_PAGE,fragmentManager.findFragmentByTag(FRAGMENT_TAG[0]));
                pages.put(PageEnum.BOARD_PAGE,fragmentManager.findFragmentByTag(FRAGMENT_TAG[1]));
                pages.put(PageEnum.FOLLOW_PAGE,fragmentManager.findFragmentByTag(FRAGMENT_TAG[2]));
                pages.put(PageEnum.MINE_PAGE,fragmentManager.findFragmentByTag(FRAGMENT_TAG[3]));
            }
             // 选中index
             setTabSelection(lastIndex);
        
        }
    
    • 3.在每个fragment初始化后添加进入事务,并且加入tag,保证后面通过tag取出fragment。
    transaction.add(R.id.fl_main,homeFragment,FRAGMENT_TAG[0]);
    transaction.add(R.id.fl_main,boardFragment,FRAGMENT_TAG[1]);
    transaction.add(R.id.fl_main,followFragment,FRAGMENT_TAG[2]);
    transaction.add(R.id.fl_main,mineFragment,FRAGMENT_TAG[3]);
    

    这样操作后,fragment就不会再出现错乱重叠的情况。

    !!!这是之前看见别人的一篇博客,我忘记了是谁的博客,这里在记录一下,完全没有侵权的意思,如有冒犯,请正主留言我加上博客地址。

    相关文章

      网友评论

          本文标题:使用fragment导致页面错乱重叠

          本文链接:https://www.haomeiwen.com/subject/lfinbqtx.html