欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

【android】fragment重叠的解决

程序员文章站 2022-04-10 09:49:20
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar...

关于fragment重叠的解决在网上已有许多资料,但是因为项目里给的框架的代码是在MainActivity里就把fragment初始化了,我也懒得大幅度去修改,这里来说一下我投机取巧的做法:

用一个成员变量isDetory记录是否被activity被摧毁了

  if (savedInstanceState != null&&mContent==null)
        {
            isDestory=true
        }

这里是我切换fragment的代码,第一个参数是fragment,第二个是fragment的名字,第三个FrameLayout的id。
实际上就是用hashmap,保存他们的信息,避免重复add,mContent保存当前的fragment,mContent为空时就直接add不用hide。
当我们知道activity被摧毁了,isDestory为true,用户点击了别的tab标签,我们就直接replace它,将信息保存到hashmap,isDestory变为false。

fun switchFragment(fragment: Fragment?, simpleName: String, id: Int) {
         val manager = supportFragmentManager
         val mTransaction = manager.beginTransaction()
        if (fragment == null) {
            return
        }
        if (isDestory==true){
            fragments.put(simpleName, simpleName)
            mTransaction.replace(id, fragment, simpleName)
            isDestory==false
        }else{
        if (mContent == null) {
            fragments.put(simpleName, simpleName)
            mTransaction.add(id, fragment, simpleName)
        } else {
            if (fragments.containsKey(simpleName)) {
                mTransaction.hide(mContent!!).show(fragment)
            } else {
                fragments.put(simpleName, simpleName)
                mTransaction.hide(mContent!!).add(id, fragment, simpleName)
            }
        }}
        mContent = fragment
        mTransaction.commitAllowingStateLoss()
    }

屁话说了这么多,其实就是用了replace而已,我却走了许多弯路,看来得认真了解每一行代码的意思。

本文地址:https://blog.csdn.net/ophlia_qer/article/details/107468755

相关标签: android studio