Android 如何使用导航组件保持对话框打开?

Android 如何使用导航组件保持对话框打开?,android,android-architecture-navigation,Android,Android Architecture Navigation,我正在尝试使用导航组件从对话框导航到片段。我面临的问题是,对话框在导航后自动弹出,因为它实现了androidx.navigation.FloatingWindow接口(文档链接-) 因此,我希望保持底层对话框处于打开状态。实现这一目标的最佳选择是什么 我的导航图: <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schema

我正在尝试使用导航组件从对话框导航到片段。我面临的问题是,对话框在导航后自动弹出,因为它实现了androidx.navigation.FloatingWindow接口(文档链接-)

因此,我希望保持底层对话框处于打开状态。实现这一目标的最佳选择是什么

我的导航图:

<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/return_order_dialog_nested_nav_graph"
    app:startDestination="@id/returnOrderBottomDialog">

<dialog
    android:id="@+id/returnOrderBottomDialog"
    android:name="ru.dpd.features.returnOrder.ReturnOrderBottomDialog"
    android:label="ReturnOrderBottomDialog"
    tools:layout="@layout/dialog_bottom_return_order">
    <argument
        android:name="orderId"
        app:argType="string" />
    <action
        android:id="@+id/action_returnOrderBottomDialog_to_returnOrderDepartmentMapFragment"
        app:destination="@id/returnOrderDepartmentMapFragment" />
</dialog>

<fragment
    android:id="@+id/returnOrderDepartmentMapFragment"
    android:name="ru.dpd.features.returnOrder.tabs.map.ReturnOrderDepartmentMapFragment"
    android:label="ReturnOrderDepartmentMapFragment"
    tools:layout="@layout/fragment_departments_map">
    <argument
        android:name="orderId"
        app:argType="string" />
    <argument android:name="cityId" />
</fragment>

</navigation>


没有正式的解决方案,这是一种变通办法。我已经尝试使用容器片段作为后堆栈中的条目/节点

实际上,当容器启动对话框显示给用户时(在导航或弹出窗口中)

容器片段没有视图。它将在创建视图中启动对话框。所有对话框参数
(orderId,…)
必须传递到容器片段,然后手动传递到对话框

class MyDialogContainerFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        // launch the dialog
        findNavController(this).navigate(....)

        return null
    }
}