Activity中销毁fragment

应用场景:Activity中add多个fragment,fragmentA跳到fragmentB,再从B跳到A,此时要销毁fragmentB

1、在添加fragment中给每一个fragment添加一个tag,

 /**
     * 暂存Fragment
     */
    private var mFragment = Fragment()

    /**
     * 选择Fragment存放
     */
    private fun switchContent(to: Fragment?, tag: String) {

        if (to != null && mFragment !== to) {
            val transaction = supportFragmentManager.beginTransaction()
            // 先判断是否被add过
            if (!to.isAdded) {
                // 隐藏当前的fragment,add下一个到Activity中
                transaction.hide(mFragment).add(R.id.layout_fragment, to, tag)
                    .commitAllowingStateLoss()
            } else {
                // 隐藏当前的fragment,显示下一个
                transaction.hide(mFragment).show(to).commitAllowingStateLoss()
            }
            mFragment = to
        }
    }

2、fragment中根据设置的tag获取fragment的实例并且销毁它

override fun onHiddenChanged(hidden: Boolean) {
        super.onHiddenChanged(hidden)
        if (hidden) {
            //当前fragment不可见的时候,销毁它
            activity?.supportFragmentManager?.findFragmentByTag("b")?.let {
                activity?.supportFragmentManager?.beginTransaction()?.remove(
                    it
                )?.commit()
            }
            (activity as MainActivity).bFragment=null
            
        } else {
            
        }
    }

3、特别注意:

不要在销毁的fragment中直接获取activity的fragment总数,这时候的总数是还没有变化的,测试的时候可以写一个按钮直接获取

activity中fragment的总数

btnremove.setOnClickListener {
    var size = supportFragmentManager.fragments.size.toString()
   var s= supportFragmentManager.findFragmentByTag("b")==null
    Toast.makeText(this, size+s.toString(), 0).show()
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值