设置
我目前有这个简单的应用程序设置,其中包含电影列表page_movies
和fragmentMovieDetails
. 片段都包含自己的工具栏,因为它们不同。
fragmentMovieDetails
有一个相关电影的列表,用户可以单击并转到该电影的详细信息页面。因此导航图中的递归箭头。
片段电影详情:
private fun setupToolbar() {
val navController = findNavController()
binding.collapsingToolbarLayout.setupWithNavController(
binding.toolbar,
navController,
AppBarConfiguration(navController.graph)
)
}
问题
我正在尝试通过单击中的向上箭头来实现正确的向上导航行为fragmentMovieDetails
。箭头应始终直接导航回,page_movies
而后退按钮应遍历 backstack。目前箭头总是返回而不是弹出堆栈并返回列表。
我试过的
我试图在 中实现我自己onOptionsItemSelected
的fragmentMovieDetails
,但从未调用过该方法
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
findNavController().navigateUp()
}
return true
}
我还尝试将app:popUpToInclusive
, app:popUpTo
&添加app:launchSingleTop
到其中的操作中main_nav_graph.xml
,如下所示:
<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/nav_graph"
app:startDestination="@id/page_movies">
<fragment
android:id="@+id/page_movies"
android:name="com.timgortworst.cleanarchitecture.presentation.features.movie.list.MoviesFragment"
android:label="@string/movie_list_toolbar_title"
tools:layout="@layout/fragment_media_list">
<!-- NOTE: When using shared elements transitions,
you should not use the Animation Framework (enterAnim, exitAnim, and so on).
Instead, you should be using only the Transition Framework
for setting your enter and exit transitions.
see: https://developer.android.com/guide/navigation/navigation-animate-transitions#shared-element -->
<action
android:id="@+id/show_movie_details"
app:destination="@id/fragmentMovieDetails" />
</fragment>
<fragment
android:id="@+id/fragmentMovieDetails"
android:name="com.timgortworst.cleanarchitecture.presentation.features.movie.details.MovieDetailsFragment"
android:label="{pageTitle}"
tools:layout="@layout/fragment_media_details">
<action
android:id="@+id/show_movie_details"
app:destination="@id/fragmentMovieDetails" />
<argument
android:name="pageTitle"
app:argType="string" />
<argument
android:name="movieId"
app:argType="integer" />
<argument
android:name="movieImage"
app:argType="string" />
<argument
android:name="transitionName"
app:argType="string" />
</fragment>
</navigation>
我想知道如何使用 Android 导航组件正确实现所需的向上导航行为。任何帮助表示赞赏!