像导航抽屉一样切换片段(带后退箭头)
Posted
技术标签:
【中文标题】像导航抽屉一样切换片段(带后退箭头)【英文标题】: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 传递给新片段等。
感谢您的帮助:)
【问题讨论】:
【参考方案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)
);
我发现抽屉使用导航控制器来更改显示的片段。 我已经设法得到它并改变它以获得与我点击菜单相同的行为:)
【讨论】:
以上是关于像导航抽屉一样切换片段(带后退箭头)的主要内容,如果未能解决你的问题,请参考以下文章
actionBarDrawerToggle.setDrawerIndicatorEnabled(false) 后退箭头没有动作