Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在导航组件中从对话框导航到片段?_Android_Android Fragments_Android Dialogfragment_Android Navigation_Android Architecture Navigation - Fatal编程技术网

Android 如何在导航组件中从对话框导航到片段?

Android 如何在导航组件中从对话框导航到片段?,android,android-fragments,android-dialogfragment,android-navigation,android-architecture-navigation,Android,Android Fragments,Android Dialogfragment,Android Navigation,Android Architecture Navigation,我试图在导航组件中从对话框片段导航到片段,但得到了奇怪的结果 当我从DialogFragment导航到Fragment时,背景片段将更改为目标片段,当前对话框位于其顶部,而不是仅仅移动到目标片段 这是导航图 <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-au

我试图在导航组件中从
对话框片段
导航到
片段
,但得到了奇怪的结果

当我从
DialogFragment
导航到
Fragment
时,背景片段将更改为目标片段,当前对话框位于其顶部,而不是仅仅移动到目标片段

这是导航图

<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/home"
    app:startDestination="@+id/titleScreen">

    <fragment
        android:id="@+id/titleScreen"
        android:name="com.example.android.navigationadvancedsample.homescreen.Title"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_title">
        <action
            android:id="@+id/action_title_to_about"
            app:destination="@id/aboutScreen"/>
    </fragment>
    <dialog
        android:id="@+id/aboutScreen"
        android:name="com.example.android.navigationadvancedsample.homescreen.About"
        android:label="@string/title_about"
        tools:layout="@layout/fragment_about">
        <action
            android:id="@+id/action_aboutScreen_to_register"
            app:destination="@id/register" />
    </dialog>
    <fragment
        android:id="@+id/register"
        android:name="com.example.android.navigationadvancedsample.formscreen.Register"
        android:label="fragment_leaderboard"
        tools:layout="@layout/fragment_leaderboard" />
</navigation>

为什么我会出现这种行为,或者如何修复它

我指的是正常的对话行为。比如说,我在片段a上有一个对话框D,然后从D上的按钮移动到片段B,屏幕应该显示B。当我从B弹出时,它应该转到D的前一个阶段,在A之上,您可以使用

view.getDialog().dismiss(); 
在导航到B之后。但这样,当您返回到A片段时,对话框将不可见


若你们真的希望它是可见的,也许你们应该尝试使用片段并假装它是对话框。像下面的活动示例一样。

感谢@musooff提交文件

这个问题在导航2.1.0-alpha06上得到了修复,还有其他对话框不一致,如


但是,如果可以,请更新到2.1.0-beta02或更高版本。

可以吗?@ianhanniballake这真的是一个bug吗?我只是不想在我做错事的时候提交一个bug,你所描述的不是正常的对话框行为-通常,从对话框中选择某个东西会永久关闭对话框(用户做出了选择,在该对话框中没有其他操作)-为此,你需要添加一个
app:poputo=“@+id/aboutScreen”app:popuptinclusive=“true”
。但你并没有要求这种行为,而是要求在按下“后退”按钮后返回对话框,这是不受支持的,应该作为功能请求/错误提交。@ianhanniballake我相信你知道得更好,但您所描述的行为适用于AlertDialog,在AlertDialog中,我有简单的基本操作,如“是”或“否”,用户将在其中进行选择,而您不需要该对话框。但是对于DialogFragment,我们通常有一些复杂的对话框。假设有一个注册页面,当用户单击“注册”按钮时,我会显示UserAgreement弹出窗口。在我的UserAgreement弹出窗口中,我会有PrivacyPolicy页面的链接,用户可以在该页面上访问,并且应该能够返回UserAgreement弹出窗口。每个对话框都应该由一个DialogFragment管理(对话框本身在配置更改等情况下无法生存),无论它有多复杂。您的用例似乎是合理的,这就是为什么您应该提交一个bug以使其成为可能。他们已经提交了“修复”,但我无法测试它。谢谢你的通知,不客气。据我所能测试,一切正常。