如何为底部导航栏手动设置 StartDestiantion
How can I manually set StartDestiantion for Bottom navigation bar
我正在尝试为底部导航栏手动设置 startDestination
。
共有5页,每页里面有一个Activity礼物。
因此,例如我选择了 menu 3 并打开了片段,
现在在片段 Activity 中,我单击了一个 button
,它打开了一个新的 Activity.
通常在正常 activity 中,当我们在 activity 之间浏览时,当我们按 后退键 时,它会返回到上一个 activity如果我们不设置方法 onBackPress
.
但是,在 activity 打开后,当我按下 后退键 时,它会打开 菜单 1 而不是 菜单 3,因为,在我点击 Button
打开另一个 Activity.
之前,点击了菜单 3
这是我试图避免这种情况发生的代码,所以我通过 Intent 传递了一个 String
键,当我按下 BackKey 时,因为它打开 Menu 1 所以我开始 HomePage
我已经初始化了 NavigationView 并且在加载页面之前我想设置startDestination
.
这是我的代码:
private void navigationInit() {
SharedPreferences sharedPreferences= getSharedPreferences("HOME",MODE_PRIVATE);
String homePage= sharedPreferences.getString("home","");
if (!homePage.equals("none")){
type= getIntent().getStringExtra("type");
}else{
type=homePage;
}
if (type.equals("restaurant")){
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.homeFragment);
navGraph.getStartDestination();
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
else if (type.equals("drinks")){
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.drinksFragment);
navGraph.getStartDestination();
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
else if (type.equals("profile")){
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.profileFragment);
navGraph.getStartDestination();
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
else if (type.equals("recent"))
{
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.recentOrderFragment);
navGraph.getStartDestination();
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
else
{
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
}
即使我像这样更改默认代码:
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler=
Navigation.findNavController(this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavigationUI.setupWithNavController(navigationView,navigationControler);
我仍然得到相同的结果。
每个 if
和 else
语句中的代码只是多余的,以确保代码正常工作。
但是,问题是 .setStartDestination
被突出显示了,我已经检查过它说
navGraph.getStartDestination()
的结果被忽略
这是我的代码 HomePage.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".home.HomePage">
<fragment
android:id="@+id/nav_graph_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
android:layout_above="@+id/Bottom_Nav_Bar"
app:navGraph="@navigation/nav_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/Bottom_Nav_Bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="0dp"
android:background="?android:attr/selectableItemBackground"
app:menu="@menu/bottom_nav_menu_item"/>
谁能帮帮我,谢谢!!!
这是我试图在按下 BACKKEY 时获得结果的图像,但它返回到默认启动。
这里有两种情况,首先我按绿色菜单,然后我按查看更多 activity 打开但是当我按下后退键时它回到第一个 Activity.
在第二种情况下,当我按下后退键时,它会返回到之前的 Activity,即 Green Activity.
我正在尝试实现第二种情况,但是当我按下后退时,它会返回到 第一个菜单
而不是使用
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.homeFragment);
navGraph.getStartDestination();
我在 onResume 方法中使用了 navigationController.navigate(R.id.drinksFragment);
与上面相同的代码。
像这样:
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavigationUI.setupWithNavController(navigationView,navigationControler);
主要activity
和 onResume 方法:
我在上面使用的相同代码与 sharedPreference 和 if & else 仅包含
navigationController.navigate(R.id.DesiredFragment);
随条件变化
终于解决了我的问题。
我正在尝试为底部导航栏手动设置 startDestination
。
共有5页,每页里面有一个Activity礼物。
因此,例如我选择了 menu 3 并打开了片段,
现在在片段 Activity 中,我单击了一个 button
,它打开了一个新的 Activity.
通常在正常 activity 中,当我们在 activity 之间浏览时,当我们按 后退键 时,它会返回到上一个 activity如果我们不设置方法 onBackPress
.
但是,在 activity 打开后,当我按下 后退键 时,它会打开 菜单 1 而不是 菜单 3,因为,在我点击 Button
打开另一个 Activity.
这是我试图避免这种情况发生的代码,所以我通过 Intent 传递了一个 String
键,当我按下 BackKey 时,因为它打开 Menu 1 所以我开始 HomePage
我已经初始化了 NavigationView 并且在加载页面之前我想设置startDestination
.
这是我的代码:
private void navigationInit() {
SharedPreferences sharedPreferences= getSharedPreferences("HOME",MODE_PRIVATE);
String homePage= sharedPreferences.getString("home","");
if (!homePage.equals("none")){
type= getIntent().getStringExtra("type");
}else{
type=homePage;
}
if (type.equals("restaurant")){
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.homeFragment);
navGraph.getStartDestination();
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
else if (type.equals("drinks")){
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.drinksFragment);
navGraph.getStartDestination();
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
else if (type.equals("profile")){
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.profileFragment);
navGraph.getStartDestination();
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
else if (type.equals("recent"))
{
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.recentOrderFragment);
navGraph.getStartDestination();
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
else
{
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavigationUI.setupWithNavController(navigationView,navigationControler);
}
}
即使我像这样更改默认代码:
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler=
Navigation.findNavController(this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavigationUI.setupWithNavController(navigationView,navigationControler);
我仍然得到相同的结果。
每个 if
和 else
语句中的代码只是多余的,以确保代码正常工作。
但是,问题是 .setStartDestination
被突出显示了,我已经检查过它说
navGraph.getStartDestination()
的结果被忽略
这是我的代码 HomePage.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".home.HomePage">
<fragment
android:id="@+id/nav_graph_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
android:layout_above="@+id/Bottom_Nav_Bar"
app:navGraph="@navigation/nav_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/Bottom_Nav_Bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="0dp"
android:background="?android:attr/selectableItemBackground"
app:menu="@menu/bottom_nav_menu_item"/>
谁能帮帮我,谢谢!!!
这是我试图在按下 BACKKEY 时获得结果的图像,但它返回到默认启动。
这里有两种情况,首先我按绿色菜单,然后我按查看更多 activity 打开但是当我按下后退键时它回到第一个 Activity.
在第二种情况下,当我按下后退键时,它会返回到之前的 Activity,即 Green Activity.
我正在尝试实现第二种情况,但是当我按下后退时,它会返回到 第一个菜单
而不是使用
NavGraph navGraph = navigationControler.getNavInflater().inflate(R.navigation.nav_graph);
navGraph.setStartDestination(R.id.homeFragment);
navGraph.getStartDestination();
我在 onResume 方法中使用了 navigationController.navigate(R.id.drinksFragment);
与上面相同的代码。
像这样:
navigationView= findViewById(R.id.Bottom_Nav_Bar);
navigationControler= Navigation.findNavController(HomePage.this,R.id.nav_graph_fragment);
navigationView.setItemIconTintList(null);
NavigationUI.setupWithNavController(navigationView,navigationControler);
主要activity
和 onResume 方法:
我在上面使用的相同代码与 sharedPreference 和 if & else 仅包含
navigationController.navigate(R.id.DesiredFragment);
随条件变化
终于解决了我的问题。