【发布时间】:2021-02-15 05:11:01
【问题描述】:
我正在尝试使用 android 中的导航组件显示对话框。我已经完成了在 stackoverflow Navigation Architecture Component - Dialog Fragments
提出的另一个问题我在nav_graph.xml 中添加了对话框组件,如下所示
<dialog
android:id="@+id/dialog"
android:name="com.android.example.ui.MyDialogFragment"
tools:layout="@layout/dialog_fragment" />
我在我的另一个片段中添加了一个操作,以在nav_graph.xml 中显示如下对话框
<fragment
android:id="@+id/Fragment1"
android:name="com.android.example.ui.Fragment1"
android:label="Fragment"
tools:layout="@layout/fragment1">
<action
android:id="@+id/action_fragment1_to_dialog"
app:destination="@id/dialog" />
</fragment>
我创建了一个kotlin 类MyDialogFragment 如下
class MyDialogFragment : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(
R.layout.dialog_fragment,
container, false
)
}
}
这里来自Fragment1 类,我正在尝试显示如下对话框
findNavController().navigate(R.id.action_fragment1_to_dialog)
当我尝试显示对话框时,出现以下错误
难题 1 已解决
java.lang.ClassCastException: androidx.navigation.fragment.DialogFragmentNavigator$Destination cannot be cast to androidx.navigation.fragment.FragmentNavigator$Destination
at com.android.dairy.MainActivity$onCreate$1.onDestinationChanged(MainActivity.kt:47)
at androidx.navigation.NavController.dispatchOnDestinationChanged(NavController.java:504)
at androidx.navigation.NavController.navigate(NavController.java:1142)
at androidx.navigation.NavController.navigate(NavController.java:944)
at androidx.navigation.NavController.navigate(NavController.java:877)
at androidx.navigation.NavController.navigate(NavController.java:863)
at androidx.navigation.NavController.navigate(NavController.java:851)
问题2
如何获取 MyDialogFragment 的实例以更新其属性或在 Fragment1 中设置按钮 onClick 侦听器
【问题讨论】:
-
请包含您的异常的完整堆栈跟踪。你读过guide for returning a result,特别是Considerations when using dialog destinations吗?
-
我的用例不同。首先是当我尝试导航到没有任何结果的对话框时,上面的异常即将到来。我正在更新完整的堆栈跟踪
-
异常来自您的
MainActivity的您的onDestinationChanged回调。请包含该代码。 -
@ianhanniballake 是的,问题出在我正在投射片段目的地的活动中。这样问题1就解决了。有没有办法在宿主片段中获取对话片段的实例?
-
那么...您是否阅读了返回结果的指南?这就是你应该这样做的方式。
标签: android kotlin android-fragments navigation