如何为底部导航栏手动设置 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);

我仍然得到相同的结果。

每个 ifelse 语句中的代码只是多余的,以确保代码正常工作。

但是,问题是 .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); 

随条件变化

终于解决了我的问题。