如果从 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(本机方法)
我想知道是否有人可以暗示这个问题。