3

我有一个使用 XML 定义的图形,并在我的 NavGraph 中添加了一个 DialogFragment 作为 Fragment 之一。当我使用 resId 调用 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>

我对活动和片段的其他操作工作得很好。

4

2 回答 2

1

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

谷歌说:

目的地是您可以在应用程序中导航到的任何地方。虽然目的地通常是代表特定屏幕的片段..

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

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

于 2018-08-08T23:06:48.547 回答
1

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

<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>
于 2020-09-08T16:40:29.643 回答