Activityでのfragmentの破棄
適用シーン:Activityでaddの複数のfragmentがあり、fragmentAがfragmentBにジャンプし、BからAにジャンプするとfragmentBが破棄されます.
1、fragmentの追加で各fragmentにtagを追加し、
2、fragmentで設定したtagに基づいてfragmentのインスタンスを取得し、破棄する
3、特に注意:
破棄されたfragmentでactivityのfragmentの総数を直接取得しないでください.この場合の総数はまだ変化していません.テスト時にボタンを書いて直接取得することができます.
Activityにおけるfragmentの総数
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()
}