[英]Managing fragments with bottom navigation bar
我在容器中更改片段时遇到问题。 我有三个导航: Home
、 Special offers
、 Profile
。 在Home
导航中,视情况而定,它可能是fragment1_1
或fragment2_2
。 我的问题是从我的容器中显示片段。 我尝试使用findFragmentById
,但是当我在Profile
导航中并尝试 go 到Home
时,我的代码不会从Pofile
中hide()
片段。 我试图查看日志,发现它隐藏了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()
function。
你可以试试这个:
//Fragment1 is your new fragment to be shown.
Fragment fragment=new Fragment1();
if (fragment != null) {
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
//frams is your backup fragment upon on your navigation/new black
fragment(thi will beshown if the Fragment1 is not working)
ft.replace(R.id.frams, fragment);
ft.commit();
你可以试试这个。 经过测试对我来说工作正常。
每当要添加和显示以前的现有片段时调用此波纹管方法
/**
* 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()
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.