繁体   English   中英

使用底部导航栏管理片段

[英]Managing fragments with bottom navigation bar

我在容器中更改片段时遇到问题。 我有三个导航: HomeSpecial offersProfile Home导航中,视情况而定,它可能是fragment1_1fragment2_2 我的问题是从我的容器中显示片段。 我尝试使用findFragmentById ,但是当我在Profile导航中并尝试 go 到Home时,我的代码不会从Pofilehide()片段。 我试图查看日志,发现它隐藏了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM