像导航抽屉一样切换片段(带后退箭头)

Switch fragment like Nav drawer does (with back arrow)

我正在尝试制作一个应用程序,但我正在努力解决一个问题。 我想通过单击按钮从“Accueil”(主页)转到例如“Depense”(费用)。 正如您可以查看 gif(在 post 末尾),如果我通过菜单这样做,我会在顶部看到一个后退箭头。而且,如果我从家里转到“Avance”(高级),我会看到菜单图标。

我设法找出它的来源,我使用标准的导航抽屉,如果我在代码中添加我的片段,我就有菜单,如果没有,我就有箭头。

        mAppBarConfiguration = new AppBarConfiguration.Builder(
            R.id.nav_home, R.id.nav_gallery, R.id.nav_avance)
            .setDrawerLayout(drawer)
            .build();

R.id.nav_avance 在但 R.id.depense 不在。这就是我得到箭头的原因。

我正在尝试制作与标准抽屉一样的效果,但我无法做到。 我已经在我的“Accueil”(主页)片段代码中尝试过这个:

        Button b = root.findViewById(R.id.player_1);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment fragment = new DepenseFragment();

                FragmentManager fragmentManager = getFragmentManager();
                FragmentTransaction ft = fragmentManager.beginTransaction();
                ft.replace(R.id.nav_host_fragment, fragment);
                ft.commit();
           }
    });

但是如果我点击按钮,新的片段会出现但是..我在顶部有菜单图标,旧文本是“Accueil”而不是“Depense”。

你能帮我实现这个吗? 有关信息,我想在这个新片段中根据我单击的按钮分配一个数字。 比如我点击player_1,我想传1..player_2传2给新片段等等

感谢您的帮助:)

我认为没有“build-in”解决方案,即您必须在单击按钮时手动 manipluate/update ActionBar 中的图标。因此,我会将以下代码添加到您的 onClick() 方法中:

ActionBar actionbar = this.getSupportActionBar();
if (actionbar != null) {
    // get the drawable which you want to show
    Drawable icon = this.getResources().getDrawable(R.drawable.baseline_arrow_back_white_24);

    // if necessary, adapt it to your theme
    icon.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);

    // set/update the icon
    actionbar.setHomeAsUpIndicator(backArrow);
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeButtonEnabled(true);
}

请注意 this 指的是您的 activity 对象,因此您必须调整该部分。因为我不知道 b 位于“哪里”,所以我只能猜测您必须如何调整它。例如,如果 b 已经在您的 Activity 中,您可以将 this 替换为 MainActivity.this

如果 this.getSupportActionBar() returns 为空,您可能需要调整 XML 布局。请以此处为起点: https://developer.android.com/training/appbar/setting-up

请在此处查看所用方法的详细说明(例如,setDisplayHomeAsUpEnabled): https://developer.android.com/reference/android/app/ActionBar

请注意上面的drawable来自这里(两个图标都可用): https://material.io/resources/icons/?style=baseline

经过(几个)小时的研究和尝试,这是我自己的答案。

        Button b = root.findViewById(R.id.player_1);
        b.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View v) {
                NavOptions.Builder builder = new NavOptions.Builder();
                NavController navController = Navigation.findNavController(root);

                NavOptions options = builder.build();
                try {
                    navController.navigate(R.id.nav_joueur, null, options);
                } catch (IllegalArgumentException e) {
                }
        }
    });

我发现抽屉使用导航控制器来更改显示的片段。 我已经设法获取并更改它以获得与我单击菜单时相同的行为:)