我正在使用导航库(2.2.0-rc04),并且我有两个DialogFragments。第一个是A,从MainFragment
打开。第二个是B,它只是A所打开的确认警报对话框。这是相关导航XML的整体结构:
<navigation app:startDestination="@id/mainFragment" ...>
<fragment android:id="@+id/mainFragment" ...>
<action
android:id="@+id/action_mainFragment_to_ADialog"
app:destination="@id/ADialog" />
</fragment>
<dialog
android:id="@+id/ADialog"
android:name="com...ADialog"
android:label="ADialog"
tools:layout="@layout/dialog_a">
<action
android:id="@+id/action_aDialog_to_bDialog"
app:destination="@id/BDialog" />
</dialog>
<dialog
android:id="@+id/BDialog"
android:name="com...BDialog"
android:label="BDialog" />
<action
android:id="@+id/action_global_login"
app:destination="@id/nav_graph_login"
app:popUpTo="@id/mainFragment"
app:popUpToInclusive="true"/>
</navigation>
我希望一次只在屏幕上显示一个对话框。因此,当用户点击A上的按钮转到B时,我在调用dismiss()
弹出B之前立即在A上调用navigate(action_aDialog_to_bDialog)
。B弹出,但是当我尝试从B调用navigate(action_global_login)
时,出现以下错误:
IllegalStateException: Fragment B not associated with a fragment manager.
任何想法是什么问题以及如何解决?
而不是通过编程方式调用dismiss()
,我对图形进行了如下更新:
<dialog
android:id="@+id/ADialog"
android:name="com...ADialog"
android:label="ADialog"
tools:layout="@layout/dialog_a">
<action
android:id="@+id/action_aDialog_to_bDialog"
app:destination="@id/ADialog"
app:popUpTo="@id/ADialog"
app:destination="@id/BDialog" />
</dialog>