Activity에서 fragment 제거

응용 장면:Activity에서dd여개의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()
}

좋은 웹페이지 즐겨찾기