当前位置: 移动技术网 > 移动技术>移动开发>Android > 【android】fragment重叠的解决

【android】fragment重叠的解决

2020年07月23日  | 移动技术网移动技术  | 我要评论

关于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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网