Android Fragments BottomNavigationView未选择片段回栈上的项

bqucvtff  于 2023-08-06  发布在  Android
关注(0)|答案(2)|浏览(125)

我有一个小的应用程序与活动和两个片段内。这些片段将使用BottomNavitationView加载。
MonitoringFragment加载到Activity中的OnCreate上。
我想把这个片段添加到backstack中,这样当我在第二个片段(ConnectionFragment)中时,我按下back键,就可以到达第一个片段。这个很好用。但是,BotttonNavigationView不会更新(从第二个片段返回时,不会将第一个项设置为选中。图3)。我假设它本身不能处理这种行为,我必须自己实现它,但我所做的每一次尝试都不成功。

活动代码:

Fragment activeFragment = null;
BottomNavigationView bottomNavigationView = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bottomNavigationView = findViewById(R.id.bottom_navigation);

    bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
        switch (item.getItemId()) {
            case R.id.monitoring:
                setCurrentFragment(new MonitoringFragment(), false);
                break;
            case R.id.connection:
                setCurrentFragment(new ConnectionFragment(), true);
                break;
        }
        return true;
    });
    setCurrentFragment(new MonitoringFragment(), true);
}

private void setCurrentFragment(Fragment fragment, boolean addToBackStack) {
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.fragment_container, fragment);
    if (addToBackStack) {
        fragmentTransaction.addToBackStack(null);
    }
    fragmentTransaction.commit();
    activeFragment = fragment;
}

字符串
谢谢你,谢谢

jhdbpxl9

jhdbpxl91#

是,BottomNavigationView未使用fragmentManager设置。当一个片段被恢复时,你可以自己设置prop select tab。
或者你可以使用导航组件和BottomNavigationView,它们可以一起工作。
使用第二种方法时,按下返回按钮不会将您从第二个片段返回到第一个片段。

zaqlnxep

zaqlnxep2#

面对类似的问题,我是这样解决的
我在我的navcontroller中添加了OnDestinationChangedListener,并在我的progect中创建了几个带有片段目标标签的数组列表。
当当前目的地位于这些片段之一时,选中底部菜单按钮
我希望代码示例比我的解释更清楚)

val destListNews = arrayListOf(
        "news_fragment",
        "NewsViewingFragment"
    )

    val destListAds = arrayListOf(
        "ads_view_fragment",
        "ads_fragment",
        "AdsAddFragment"
    )

    val destListPass = arrayListOf(
        "pass_fragment",
        "pass_creation_fragment",
        "PassViewFragment"
    )

    val destListVotes = arrayListOf(
        "VotesListFragment",
        "VotesAddFragment",
        "ChooseVoteTypeFragment"
    )

    navController.addOnDestinationChangedListener { controller, destination, arguments ->

        when (destination.label) {

            in destListNews -> {
                bottom_nav.menu.getItem(0).isChecked = true
            }

            in destListAds -> {
                bottom_nav.menu.getItem(1).isChecked = true
            }

            in destListPass -> {
                bottom_nav.menu.getItem(2).isChecked = true
            }

            in destListVotes -> {
                bottom_nav.menu.getItem(3).isChecked = true
            }

            else -> {
                bottom_nav.menu.getItem(4).isChecked = true
            }
        }
    }

字符串

相关问题