使用 DialogFragment 作为 Android NavController 中的片段之一

Using DialogFragment as one of the Fragment in Android NavController

我有一个使用 XML 定义的图表,我在我的 NavGraph 中添加了一个 DialogFragment 作为片段之一。当我在该导航控制器上使用 resId 和 bundle 调用 NavController.navigate 时,我没有看到显示任何对话框。有什么方法可以使用 DialogFragment 而不是标准 Fragment?

<fragment
        android:id="@+id/noLoginDialog"
        android:name="com.ram.view.NoLoginDialog"
        android:label="NoLoginDialog">
        <argument
            android:name="argTitle"
            android:defaultValue="null"
            app:type="string"/>
        <argument
            android:name="argBody"
            android:defaultValue="null"
            app:type="string"/>
        <argument
            android:name="argButton"
            android:defaultValue="null"
            app:type="string"/>
    </fragment> 

我的动作定义如下

 <container_fragment
        android:id="@+id/homeFragment"
        android:name="com.ram.home.HomeFragment"
        android:label="HomeFragment">

        <action
            android:id="@+id/action_homeFragment_to_noAuthAlertDialog"
            app:destination="@id/noLoginDialog"/>
    </container_fragment>

我对 activity 和片段的其他操作都很好。

嗯,导航库永远不会将片段作为对话框打开,它只是将第一个(主页目的地)替换为 NavHostFragment 中的其他目的地。

Google 说:

A destination is any place you can navigate to in your app. While destinations are usually Fragments representing specific screens..

请提供更多信息,例如您的导航代码 (java/kotlin)。

阅读官方 Google post 以了解有关导航的更多信息: https://developer.android.com/topic/libraries/architecture/navigation/navigation-implementing

是的,您可以从导航中调用 DialogFragment,您只需明确告诉导航您将要使用 dialog

<dialog
    android:id="@+id/simCancelFinish"
    android:name="mk.telekom.kiosk.ui.dialogs.SimCancelFinish"
    android:label="SimCancelFinish" >
    <action
        android:id="@+id/action_simCancelFinish_to_stornoSimFragment"
        app:destination="@id/stornoSimFragment"
        app:popUpTo="@id/stornoSimFragment"
        app:popUpToInclusive="true" />
</dialog>