我正在尝试为startDestination
手动设置底部导航栏。
共有5页,每页内都有一个活动。
例如,我选择了菜单3 并打开了片段,
现在在“片段活动”中,我单击了button
,这将打开一个新的活动。
通常,在正常活动中,当我们按返回键在活动之间进行浏览时,如果未设置方法onBackPress
,则会返回到上一个活动。
但是,在这里,当我按下返回键打开活动后,它会打开菜单1 而不是菜单3 ,因为菜单在我单击Button
打开其他活动之前,单击了3。
这是我试图避免发生的代码,因此,我通过Intent传递了一个String
键,当我按下 BackKey 时,它打开了菜单1 ,因此我要在初始化{strong> NavigationView 的地方开始HomePage
,并在加载页面之前先设置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 时要获得结果的图像,但是它返回到默认开始。
这里有两种情况,首先我按绿色菜单,然后按 ViewMore 活动已打开,但是当我按返回键时会返回到第一个活动。
在第二种情况下,当我按返回键时,它将返回到上一个活动,即绿色活动。
我正在尝试实现第二种情况,但是当我按后退按钮时,它会返回到第一个菜单
答案 0 :(得分:1)
代替使用
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);
主要活动中
和onResume方法:
我上面与sharedPreference一起使用的相同代码以及if和else仅包含
navigationController.navigate(R.id.DesiredFragment);
随条件而变化。
终于可以解决我的问题了。