我有一个片段,它为选项菜单添加了一个选项.单击此选项时,将打开一个对话框片段.该对话框将原始片段设置为其目标片段.如果在对话框片段打开时没有发生方向改变,则目标片段与预期一样,但是在方向改变之后,目标片段被设置为对话框片段本身而不是先前设置的片段.因此,当我尝试将目标片段转换为设置为目标片段的片段时,我得到了一个classCastException.我需要在对话框中获取目标片段,因为它实现了一个回调(OnStartOrRestartLoader).我一直试图解决这个问题超过一个星期,如果有人能指出我正确的方向,我真的很感激.由于这是我的第一个问题,如果我排除了一些必要的信息,或者这不是一个合适的问题,我会道歉.
在实现OnStartOrRestartLoader的片段(VirsārstsFragment)中,我创建了如下对话框:
FragmentManager fm = getChildFragmentManager();
SearchDialogFragment dialog = new SearchDialogFragment();
dialog.show(fm, "searchDialog");
dialog.setTargetFragment(this, DIALOGFRAGMENT);
Run Code Online (Sandbox Code Playgroud)
然后在SearchDialogFragment中,我执行以下操作来设置回调:
OnStartOrRestartLoader callback = (OnStartOrRestartLoader) getTargetFragment();
Run Code Online (Sandbox Code Playgroud)
logcat的:
08-25 12:15:55.087: E/AndroidRuntime(10057): FATAL EXCEPTION: main
08-25 12:15:55.087: E/AndroidRuntime(10057): Process: com.example, PID: 10057
08-25 12:15:55.087: E/AndroidRuntime(10057): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.MainActivity}: java.lang.ClassCastException: com.example.SearchDialogFragment cannot be cast to com.example.OnStartOrRestartLoader
08-25 12:15:55.087: E/AndroidRuntime(10057): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224)
08-25 12:15:55.087: E/AndroidRuntime(10057): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273)
08-25 12:15:55.087: E/AndroidRuntime(10057): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3759)
08-25 12:15:55.087: E/AndroidRuntime(10057): at android.app.ActivityThread.access$900(ActivityThread.java:141)
08-25 12:15:55.087: E/AndroidRuntime(10057): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
08-25 12:15:55.087: E/AndroidRuntime(10057): at …Run Code Online (Sandbox Code Playgroud)