DialogFragmentは、Fragmentから呼び出された場合はClassCastExceptionをスローしますが、Activityから呼び出された場合は正常に機能しています。同様の問題を抱えている他のいくつかの質問をすでに見てきましたが、基本的にそれらはインポートに関連していますが、私の実装ではそれを解決できませんでした。これがDialogFragmentの私の実装です。
android.app.AlertDialogをインポートします; android.app.Dialogをインポートします。 import android.app.DialogFragment; パブリッククラスHotspotScanDialogはDialogFragmentを拡張します{ SetupHotspotDialogListener mListener; @オーバーライド public Dialog onCreateDialog(Bundle savedInstanceState){ ..。 .setAdapter(hotspotAdapter、new DialogInterface.OnClickListener(){ @オーバーライド public void onClick(DialogInterface dialog、int which){ mListener.onHotspotSelectedListener(hotspotAdapter.getItem( which).toString()); } })..。 } パブリックインターフェイスSetupHotspotDialogListener{ public void onHotspotSelectedListener(String selection); } @オーバーライド public void onAttach(Activity activity){ super.onAttach(activity); 試す { mListener =(SetupHotspotDialogListener)アクティビティ; } catch(ClassCastExceptionignore){ //誰かが私の投げを指しているかどうかを確認するためだけに //ClassCastException私もこのコードなしで試しました。 新しいClassCastException(activity.toString()をスローします + "NoticeDialogListenerを実装する必要があります"); } } }
上記のDialogFragmentを使用している私のフラグメントは次のとおりです。
android.app.AlertDialogをインポートします; import android.app.DialogFragment; import android.support.v4.app.Fragment; インポートcom.xxx.yyy.ui.compontent.dialog.HotspotScanDialog; インポートcom.xxx.yyy.ui.compontent.dialog.HotspotScanDialog.SetupHotspotDialogListener; パブリッククラスSmartModeextendsFragmentはSetupHotspotDialogListenerを実装します{ private void showWifiSelectionDialog(){ DialogFragment setupWifiSelectionDialog = new HotspotScanDialog(); / * * getFragmentManager()を使用すると、「メソッド * DialogFragment型のshow(FragmentManager、String)は *引数(FragmentManager、String)に適用可能」 * / setupWifiSelectionDialog.show(getActivity()。getFragmentManager()、 Keys.TAG.toString()); } @オーバーライド public void onHotspotSelectedListener(String selection){ // 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はNoticeDialogListener02-0113: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): at android.os.Handler.handleCallback(Handler.java:615)02-01 13:11:32.750:E / AndroidRuntime(15061):at 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で。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):dalvik.system.NativeStart.main(ネイティブメソッド)
誰かがこの問題についてのヒントを与えることができるかどうか疑問に思います。