Abh*_*oop 3 android android-architecture-components android-jetpack androidx android-jetpack-navigation
我正在尝试androidx导航组件,并使用工具栏和容器设置了我的活动。我正在我的应用程序的间歇屏幕之一中执行此操作,该屏幕具有许多内部导航/步骤,并且我认为我可以尝试使用导航拱门组件。
由于这是一个间歇性屏幕,因此我想从第一个屏幕本身开始在工具栏上显示一个后退按钮。
我已经在主机活动的onCreate()方法中使用以下代码设置了工具栏,
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
NavigationUI.setupActionBarWithNavController(this, navHostFragment.getNavController());
Run Code Online (Sandbox Code Playgroud)
我可以在图表的第二个屏幕上看到后退按钮/后退箭头,但在第一个屏幕上却看不到。
<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/navigation"
app:startDestination="@id/listing">
<fragment
android:id="@+id/listing"
android:name=".ui.ItemsListingFragment"
android:label="Items"
tools:layout="@layout/items_listing" >
<action
android:id="@+id/listToQuantity"
app:destination="@id/quantity"
/>
<action
android:id="@+id/listToReason"
app:destination="@id/reason"
/>
</fragment>
<fragment
android:id="@+id/quantity"
android:name=".ui.ItemQuanitySelectionFragment"
android:label="Items"
tools:layout="@layout/fragment_item_quanity_selection" >
<action
android:id="@+id/quantityToReason"
app:destination="@id/reason"
/>
</fragment>
<fragment
android:id="@+id/reason"
android:name=".ui.ItemReasonFragment"
android:label="Items"
tools:layout="@layout/fragment_item_reason">
</fragment>
</navigation>
Run Code Online (Sandbox Code Playgroud)
从第一步开始,我还需要进行哪些更改才能在工具栏上添加后退按钮。
如您所述,导航组件在顶级以外的所有目的地均显示“后退”按钮。它使用AppBarConfiguration
来确定哪些目的地被视为“顶级”。
因此,您需要:
1)在没有顶级目标的情况下创建AppBarConfiguration
2)调用3参数版本的setupActionBarWithNavController
AppBarConfiguration abc = new AppBarConfiguration.Builder().build();
NavigationUI.setupActionBarWithNavController(this, navHostFragment.getNavController(), abc)
Run Code Online (Sandbox Code Playgroud)
要自定义“顶级”目标上的向上按钮行为,可以OnNavigateUpListener
在应用程序栏配置构建器中设置后备:
new AppBarConfiguration.Builder().setFallbackOnNavigateUpListener(listener).build()
Run Code Online (Sandbox Code Playgroud)
来自信息源的更多信息:
单击向上按钮调用NavigationUI.navigateUp(NavController, AppBarConfiguration)
,然后依次调用NavController.navigateUp()
它尝试弹出后退堆栈。由于它无法弹出堆栈,因此它什么也不做,并返回false。在这种情况下,您的后备监听器将被调用。