android popUpTo嵌套导航图ID未弹出到startDestination

3lxsmp7m  于 2023-02-27  发布在  Android
关注(0)|答案(2)|浏览(171)

我尝试使用popUpTo作为androidx导航中配置操作的一部分,以确保下一个屏幕上的后退按钮返回到指定的片段ID。
问题是我想导航回的片段被定义为嵌套图的startDestination,我希望能够在popUpTo中指定嵌套图的ID,这样我就不必直接链接到子片段的ID,我认为这是一个糟糕的做法,即使不是一个错误。
然而,获得我想要的行为的唯一方法是将popUpTo设置为嵌套图中定义为startDestination的ID,指定嵌套图ID将跳过其中定义的片段。
我找不到关于如何将popUpTo与嵌套图形一起使用的具体指导。有人能提供更多细节吗?

deikduxw

deikduxw1#

我希望能够在popUpTo中指定嵌套图的ID,这样就不必直接链接到子片段的ID,我认为这是不好的做法,即使不是错误。
这应该能正常工作。如果这不起作用,那就意味着其他地方出了问题。
在我的例子中,结果是在代码库的其他地方调用了手动操作的NavControllerbackQueue.clear())。
在删除了有问题的代码之后,我可以更新我的popUpTo以引用嵌套的图ID,并且如预期的那样清除了backstack。

w8biq8rn

w8biq8rn2#

我在使用popUpTo引用嵌套图ID的安全参数时遇到了这个问题。

设置.xml

<?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/settings"
    app:startDestination="@id/settingsFragment">

    <include app:graph="@navigation/log_in" />
    <include app:graph="@navigation/discovery" />

    <fragment
        android:id="@+id/settingsFragment"
        android:name="com.example.SettingsFragment"
        tools:layout="@layout/fragment_settings">

        <action
            android:id="@+id/action_settingsFragment_to_log_in"
            app:destination="@id/log_in"
            app:popUpTo="@id/discovery"
            app:popUpToInclusive="true" />
    </fragment>

</navigation>

生成的SettingsFragmentDirections.actionSettingsFragmentToLogIn()失败,出现上述异常。
最后我用ID来导航,比如

findNavController().popBackStack(destinationId = R.id.discovery, inclusive = true)
findNavController().navigate(resId = R.id.log_in)

相关问题