【问题标题】:Switch fragment like Nav drawer does (with back arrow)像导航抽屉一样切换片段(带后退箭头)
【发布时间】:2021-02-07 05:36:19
【问题描述】:

我正在尝试制作应用程序,但我正在努力解决一个问题。 我想通过单击按钮从“Accueil”(家庭)到例如“Depense”(费用)。 正如您可以查看 gif(在帖子末尾),如果我通过菜单查看,我在顶部有一个后退箭头。而且,如果我从家里去“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 传递给新片段等。

感谢您的帮助:)

【问题讨论】:

    标签: java android android-fragments navigation-drawer


    【解决方案1】:

    我认为没有“内置”解决方案,即,当您单击按钮时,您必须手动操作/更新 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 指的是您的活动对象,因此您必须调整该部分。由于我不知道b 的“位置”,我只能猜测您必须如何适应它。例如,如果b 已经在您的活动中,您可以将this 替换为MainActivity.this

    如果this.getSupportActionBar() 返回null,您可能需要调整您的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

    【讨论】:

    • 感谢您的回答我一直在尝试其他方法以实现我想要的,我想出了一个解决方案。我将在这个问题中分享它
    【解决方案2】:

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

            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) {
                    }
            }
        });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多