使用DialogFragment作为Android NavController中的一个Fragment

3

我有一个使用XML定义的图表,并在我的NavGraph中添加了一个DialogFragment作为其中的一个Fragment。当我调用NavController.navigate方法并提供resId和bundle参数时,我没有看到任何对话框被显示出来。是否有办法使用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>

我对与活动和片段相关的其他操作都能正常工作。

2个回答

1

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

Google说:

目的地是您可以在应用程序中导航到的任何位置。虽然目的地通常是表示特定屏幕的Fragment。

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

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


导航目前不支持对话框,我在Android Dev Summit上与导航的作者Ian Lake讨论过这个问题,他说他们有计划在未来支持它。 - RamIndani
这没有意义。因为导航是指在应用程序中导航到其他地方,我不认为显示对话框可以被视为“导航”。 - Pedro Massango
2
DialogFragment是Fragment的子类,根据它的使用方式可以成为有效的导航目标。它可以表示一个全屏对话框作为一个目的地。 - RamIndani

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接