【发布时间】:2013-01-16 10:00:33
【问题描述】:
如果从 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): 在 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): 在 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.run(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): at dalvik.system.NativeStart.main(Native Method)
我想知道是否有人可以就这个问题提供提示。
【问题讨论】:
标签: android fragment android-dialogfragment