如何使用导航架构组件在另一个活动上显示向上按钮

Raj*_*shi 4 android android-jetpack android-architecture-navigation

假设我在ActivityA有一个 Fab 按钮的父级上。单击 Fab 按钮后,它会打开ActivityB.

ActivityB包含导航图。所以我已经设置了导航组件,如:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null)
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph())
        .build();
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
Run Code Online (Sandbox Code Playgroud)

现在的问题是,我无法显示向上按钮以转到父活动。上AndroidManifext.xml,代码是:

<activity
    android:name=".ui.ActivityB"
    android:label="Activity B"
    android:launchMode="singleTop"
    android:parentActivityName=".ui.ActivityA">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.ui.ActivityA" />
</activity>
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是如何显示向上按钮?


@ianhanniballake,上面的一个正在处理你的答案,但不是这个:

Toolbar toolbar = findViewById(R.id.toolbar);

NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder()
        .build();
NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration);
Run Code Online (Sandbox Code Playgroud)

或者:

NavigationUI.setupWithNavController(toolbar, navController);
Run Code Online (Sandbox Code Playgroud)

ian*_*ake 6

根据使用 NavigationUI 文档更新 UI 组件

默认情况下,当用户位于导航图的顶级目的地时,导航按钮是隐藏的,而在任何其他目的地中显示为向上按钮。

因此,您可以通过传入一组空的顶级目的地来使向上按钮显示在所有目的地上。当您无法在导航图中向上移动时,OnNavigationUpListener您设置的 viasetFallbackOnNavigateUpListener将被调用,允许您触发您的活动的向上导航功能:

NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder()
    .setFallbackOnNavigateUpListener(new AppBarConfiguration.OnNavigateUpListener() {
        @Override
        public boolean onNavigateUp() {
            // Trigger the Activity's navigate up functionality
            return super.onSupportNavigateUp();
        }
    }).build();
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

 // Make sure to call NavigationUI.navigateUp(navController, appBarConfiguration);
 // in your Activity's `onSupportNavigateUp()`
Run Code Online (Sandbox Code Playgroud)