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

问题描述 投票:0回答:1

假设我在父母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);

现在的问题是,我无法显示向上按钮转到父活动。在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>

那么,我的问题是如何显示向上按钮?


@ianhanniballake,上面的一个正在使用你的answer但不是这个:

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);

要么:

NavigationUI.setupWithNavController(toolbar, navController);
android android-jetpack android-architecture-navigation
1个回答
0
投票

根据Update UI components with NavigationUI documentation

默认情况下,当用户位于导航图的顶级目标位置时,“导航”按钮将隐藏,并在任何其他目标位置显示为“向上”按钮。

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

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()`
© www.soinside.com 2019 - 2024. All rights reserved.