活动结果后,此NavController未知的导航目标

Fab*_*bio 6 android android-architecture-components android-jetpack android-architecture-navigation

我正在使用导航控制器1.0.0alpha05,它的工作原理非常好,但是当我在活动结果之后执行导航操作时,我却在为这个可怕的错误而苦苦挣扎。

我有一个单一的活动/多个片段结构,特别是一个包含项目列表的片段,另一个具有用于添加新项目的形式的片段。

当我添加另一张没有任何图片的照片时,它正在工作,并返回带有项目列表的上一张照片,但是当我拍摄一些照片时,导航期间会出现异常。

原因:java.lang.IllegalArgumentException:此NavController未知导航目标XX

错误记录

包含操作的表单片段的导航图:

<fragment
    android:id="@+id/idFormFragment"
    android:name="FormFragment"
    android:label="FormFragment"
    tools:layout="@layout/form_fragment">
    <argument
        android:name="idClient"
        android:defaultValue="-1"
        app:argType="integer" />
    <argument
        android:name="idServer"
        app:argType="string" />
    <action
        android:id="@+id/actionFormToList"
        app:destination="@id/idListFragment" />
</fragment>
Run Code Online (Sandbox Code Playgroud)

带安全参数的动作调用代码

FormFragmentDirections.ActionFormToList action = new FormFragmentDirections.ActionFormToList(sample.getIdJob());
Navigation.findNavController(getView()).navigate(action);
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间

Fab*_*bio 2

我找到了解决方法,但显然我不能将其视为解决方案:

我认为当片段实例状态恢复时,与此类片段关联的 nav_graph 操作的链接会以某种方式丢失或发生某种情况......但我可能是错的

在这种情况下,可以直接使用要导航到的片段的 id,而不是通过安全参数或其 id 来指向操作本身。

在这种情况下,如果您想传递参数,则必须通过捆绑包以老式方式进行。

Bundle args = new Bundle();
args.putString(ID_ARG, arg);
Navigation.findNavController(getView()).navigate(R.id.fragmentId, args);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个说法非常准确:“我认为当片段实例状态恢复时,与此类片段关联的 nav_graph 操作的链接会以某种方式丢失”。此问题在 [1.0.0-alpha07](https://developer.android.com/jetpack/docs/release-notes) 中仍然发生 (3认同)