使用 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>
我有一个使用 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>