我在更改容器中的片段时遇到问题。我有三个导航:Home
,Special offers
,Profile
。在Home
导航中可能是fragment1_1
或fragment2_2
取决于情况。我的问题是从容器中显示碎片。我尝试使用它findFragmentById
,但是当我Profile
导航并尝试进入Home
代码时,请不要hide()
使用Pofile
。我试图查看日志,发现它隐藏Home
并显示Home
。我的导航代码:
botNav.setOnNavigationItemSelectedListener {
when(it.itemId){
R.id.act_home -> {
if (!it.isChecked){
val homeFragment = supportFragmentManager.findFragmentByTag("Home")
activeFragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
activeFragment?.let { hideFragment(it) }
showFragment(homeFragment!!)
}
}
R.id.act_profile_info -> {
if (!it.isChecked) {
activeFragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
activeFragment?.let { hideFragment(it) }
showFragment(profileFragment)
}
}
R.id.act_special_offer -> {
if (!it.isChecked) {
activeFragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
activeFragment?.let { hideFragment(it) }
showFragment(specialFragment)
}
}
}
return@setOnNavigationItemSelectedListener true
}
因此,现在我想了解为什么这样做,以及如何从FrameLayout
容器中显示片段。为了为导航添加片段,我使用了addFragment()
功能。
你可以试试看 我的工作正常测试。
每当要添加并显示先前的现有片段时,请调用此波纹管方法
/**
* Method for add and replace and set fragment if exist in stack
*/
fun setAndReplaceFragment(fragmentWantToAdd: Fragment, tag: String) {
val manager = supportFragmentManager
val fragmentFind = manager.findFragmentByTag(tag)
if (fragmentFind != null) {
val ft = manager.beginTransaction()
ft.replace(R.id.mFrmContainer, fragmentFind, tag)
ft.addToBackStack(tag)
ft.commit()
} else {
val ft = manager.beginTransaction()
ft.replace(R.id.mFrmContainer, fragmentWantToAdd, tag)
ft.addToBackStack(tag)
ft.commit()
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句