使用导航库时,是否可以使用finish()
中的onSupportNavigateUp()
完成内部活动?或者我们应该使用NavController
从Stack中删除Activity
?而且,我无法使用NavController删除Activity
。
我的导航图如下所示:
<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"
app:startDestination="@id/home_frag">
<fragment
android:id="@+id/home_frag"
android:name="com.yamikrish.app.slicedemo.ui.home.HomeFragment"
android:label="home_frag"
tools:layout="@layout/home_fragment">
<action
android:id="@+id/open_details"
app:destination="@id/details_fragment" />
</fragment>
<activity
android:id="@+id/details_fragment"
android:name="com.yamikrish.app.slicedemo.ui.detail.DetailActivity"
android:label="@string/post_detail"
tools:layout="@layout/detail_page">
<argument
android:name="id"
app:type="integer" />
</activity>
<fragment
android:id="@+id/profile_frag"
android:name="com.yamikrish.app.slicedemo.ui.profile.ProfileFragment"
android:label="@string/profile"
tools:layout="@layout/profile_fragment" />
</navigation>
我试过使用如下:
(i)在DetailActivity中使用NavController
override fun onSupportNavigateUp(): Boolean {
val nav = NavController(this)
return nav.navigateUp()
}
但是获得例外,
java.lang.IllegalArgumentException:NavController后台堆栈为空
(ii)在BaseActivity中使用NavController
override fun onSupportNavigateUp(): Boolean {
return findNavController(R.id.container).navigateUp()
}
那也行不通。我做错了吗?
答案 0 :(得分:0)
在这种情况下,您的详细信息活动没有父导航图的概念。您的 ii 示例是正确的。由于BaseActivity包含一个导航图。我不知道DetailActivity在做什么,但是如果它还包含一个导航图,那么您应该使用与BaseActivity相同的代码。您遇到该错误并即时创建一个新的NavController的事实告诉我DetailActivity没有使用导航图(创建一个新的NavController且不为其提供图时,默认情况下将使用空的后堆栈进行初始化)
总而言之,DetailActivity的onSupportNavigateUp应该表现得像普通的向上导航一样。如果父母明确,则应启动它,否则,只需完成()。