底部导航如何从片段内部更改片段

问题描述 投票:0回答:2

我有一个包含 3 个片段的底部导航视图 我想从片段 1 内部而不是从活动中将片段 1 更改为片段 2 有谁知道怎么做吗?

android android-studio android-fragments bottomnavigationview
2个回答
0
投票

假设片段 1 中有一个按钮。单击该按钮,然后它会打开片段 2,并具有 BottomNavigation 项目焦点。

如果您使用导航组件,那么您只需编写

        val btnMove = rootView.findViewById<Button>(R.id.btnMove)
        btnMove.setOnClickListener {
            findNavController().navigate(R.id.favoriteFragment) //here R.id.favoriteFragment is your fragment id where you want to navigate
        }

0
投票

您需要处理片段1内某个项目的点击事件,然后您需要在MainActivity内传递一些内容。这就是我所做的:

Fragment.java:

        item.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            navigateToSecondFragment();
        }
    });


    private void navigateToSecondFragment() {
    if (getActivity() instanceof MainActivity) {
        MainActivity mainActivity = (MainActivity) getActivity();

        FragmentManager fm = mainActivity.getSupportFragmentManager();

        FragmentTransaction transaction = fm.beginTransaction();

        transaction.hide(FirstFragment.this);

        transaction.show(mainActivity.getSecondFragment());

        transaction.commit();

        mainActivity.setActive(mainActivity.getSecondFragment());

        mainActivity.getBinding().bottomNavigationView.setSelectedItemId(R.id.bottom_navigation_item_that_you_want_to_reflect);
    }
}

MainActivity.java:

    public Fragment getSecondFragment() {
    return secondFragment;
}

public void setActive(Fragment fragment) {
    active = fragment;
}

public ActivityMainBinding getBinding() {
    return binding;
}

这将在底部导航栏上设置一个活动项目,并最终显示第二个片段,而无需在 MainActivity 中使用 getSupportFragmentManager。这是java,但你可以将它转换成kotlin。

© www.soinside.com 2019 - 2024. All rights reserved.