BottomSheetDialogFragment 在第二次打开时崩溃

BottomSheetDialogFragment crashes when opened a second time

A 之前问过,但这似乎是一个不同的问题。

使用导航组件,我定义了一个对话框,如下所示:

<navigation
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main_graph"
        app:startDestination="@id/main_fragment">

    <fragment
            android:id="@+id/main_fragment"
            android:name="com.example.app.MainFragment"
            android:label="MainFragment" />

    <dialog
            android:id="@+id/dialog_fragment"
            android:name="com.example.app.DialogFragment"
            android:label="AddFeeling" />

</navigation>

MainFragment 中,我有一个运行 navController.navigate(R.id.dialog_fragment) 的按钮。这可以很好地打开对话框。当我将对话框片段滑开并再次单击按钮时,应用程序崩溃了。

崩溃是由在对话框中包含一个片段引起的。从技术上讲,我在对话框片段中有一个 NavHostFragment,但即使将标准片段放入应用程序也会崩溃。如果我在对话框中没有碎片,它就可以正常工作。

这是对话框片段布局。如您所见,<fragment> 属性是重复项所在的位置:

<androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/bottom_sheet_dialog"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

        <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize
                app:layout_constraintTop_toTopOf="parent" />

        <fragment
                android:id="@+id/dialog_nav_host_fragment"
                android:name="androidx.navigation.fragment.NavHostFragment"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                app:defaultNavHost="true"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toBottomOf="@id/toolbar"
                app:navGraph="@navigation/dialog_graph" />

    </androidx.constraintlayout.widget.ConstraintLayout>

对可能出现的问题有什么想法吗?谢谢

与我的问题类似,NavHostFragment 的片段也不能有 ID,inflater 会注意到片段有 ID,因此会将其标记为重复。