像导航抽屉一样切换片段(带后退箭头)
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) {
}
}
});
我发现抽屉使用导航控制器来更改显示的片段。
我已经设法获取并更改它以获得与我单击菜单时相同的行为:)
我正在尝试制作一个应用程序,但我正在努力解决一个问题。 我想通过单击按钮从“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) {
}
}
});
我发现抽屉使用导航控制器来更改显示的片段。 我已经设法获取并更改它以获得与我单击菜单时相同的行为:)