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()
}