如果从 Fragment 调用,我的 DialogFragment 会抛出ClassCastException,而如果从 Activity 调用它会正常工作。我已经看过其他几个有类似问题的问题,基本上这些问题与导入有关,但我无法在我的实现中解决它。这是我对 DialogFragment 的实现。
导入 android.app.AlertDialog; 导入android.app.Dialog; 导入android.app.DialogFragment; 公共类 HotspotScanDialog 扩展 DialogFragment { SetupHotspotDialogListener mListener; @覆盖 公共对话 onCreateDialog(Bundle savedInstanceState) { ... .setAdapter(hotspotAdapter, new DialogInterface.OnClickListener() { @覆盖 public void onClick(DialogInterface dialog, int which) { mListener.onHotspotSelectedListener(hotspotAdapter.getItem( 其中).toString()); } })... } 公共接口 SetupHotspotDialogListener { 公共无效 onHotspotSelectedListener(字符串选择); } @覆盖 公共无效 onAttach(活动活动){ super.onAttach(活动); 尝试 { mListener = (SetupHotspotDialogListener) 活动; } 捕捉(ClassCastException 忽略){ // 只是为了确定是否有人会指着我的投掷 // ClassCastException 我自己也试过没有这个代码。 抛出新的 ClassCastException(activity.toString() + "必须实现NoticeDialogListener"); } } }
这是我使用上述 DialogFragment 的片段:
导入 android.app.AlertDialog; 导入android.app.DialogFragment; 导入android.support.v4.app.Fragment; 导入 com.xxx.yyy.ui.compontent.dialog.HotspotScanDialog; 导入 com.xxx.yyy.ui.compontent.dialog.HotspotScanDialog.SetupHotspotDialogListener; 公共类 SmartMode 扩展片段实现 SetupHotspotDialogListener { 私人无效showWifiSelectionDialog(){ DialogFragment setupWifiSelectionDialog = new HotspotScanDialog(); /* * 使用 getFragmentManager() 只会说“方法 * DialogFragment 类型中的 show(FragmentManager, String) 不是 * 适用于参数 (FragmentManager, String)" */ setupWifiSelectionDialog.show(getActivity().getFragmentManager(), Keys.TAG.toString()); } @覆盖 公共无效 onHotspotSelectedListener(字符串选择){ // Log.d(TAG,selection); } }
这是错误日志:
02-01 13:11:32.750:E/AndroidRuntime(15061):致命异常:主要 02-01 13:11:32.750:E/AndroidRuntime(15061):java.lang.ClassCastException:com.milanix.tuki.UiMainActivity@ 41d75350 必须实现 NoticeDialogListener 02-01 13:11:32.750: E/AndroidRuntime(15061): at com.xxx.yyy.ui.compontent.dialog.HotspotScanDialog.onAttach(HotspotScanDialog.java:122) 02-01 13:11: 32.750: E/AndroidRuntime(15061): 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:787) 02-01 13:11:32.750: E/AndroidRuntime(15061): 在 android.app.FragmentManagerImpl.moveToState(FragmentManager .java:1035) 02-01 13:11:32.750: E/AndroidRuntime(15061): 在 android.app.BackStackRecord.run(BackStackRecord.java:635) 02-01 13:11:32.750: E/AndroidRuntime(15061 ): 在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397) 02-01 13:11:32.750: E/AndroidRuntime(15061): 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:426) 02-01 13:11:32.750: E/AndroidRuntime(15061):在 android.os.Handler.handleCallback(Handler.java:615) 02-01 13:11:32.750: E/AndroidRuntime(15061): 在 android.os.Handler.dispatchMessage(Handler.java:92) 02-01 13 :11:32.750: E/AndroidRuntime(15061): 在 android.os.Looper.loop(Looper.java:137) 02-01 13:11:32.750: E/AndroidRuntime(15061): 在 android.app.ActivityThread。 main(ActivityThread.java:4898) 02-01 13:11:32.750: E/AndroidRuntime(15061): at java.lang.reflect.Method.invokeNative(Native Method) 02-01 13:11:32.750: E/AndroidRuntime (15061): 在 java.lang.reflect.Method.invoke(Method.java:511) 02-01 13:11:32.750: E/AndroidRuntime(15061): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller。运行(ZygoteInit.java:1006)02-01 13:11:32.750:E/AndroidRuntime(15061):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)02-01 13:11: 32.750:E/AndroidRuntime(15061):在 dalvik.system.NativeStart.main(本机方法)
我想知道是否有人可以暗示这个问题。