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,因此会将其标记为重复。
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,因此会将其标记为重复。