android:ClassCastException尝试转换Fragments时

时间:2016-09-10 23:55:54

标签: java android oop android-fragments casting

我正在开发一个应用程序,用户可以在其中创建和编辑自己的测验。我有两个片段,EditQuizFragmentAddQuizFragment,其中一个片段扩展另一个:

public class EditQuizFragment extends Fragment
public class AddQuizFragment extends EditQuizFragment

我想将AddQuizFragment(子类)转换为EditQuizFragment

当我尝试运行以下内容时,我得到ClassCastException

EditQuizFragment editQuizFragment = new EditQuizFragment();
AddQuizFragment addQuizFragment = (AddQuizFragment) editQuizFragment;

以下是错误消息:

Caused by: java.lang.ClassCastException: com.quizmaker.fragments.EditQuizFragment cannot be cast to com.quizmaker.fragments.AddQuizFragment

我已经尝试将导致错误的代码移动到其他类,文件等,但仍然得到相同的ClassCastException。这是什么原因?我认为演员会工作。

非常感谢任何帮助或建议!

编辑:找到了解决方法。所以我试图投射的原因是因为我使用的是newInstance pattern for fragments。在AddQuizFragment.java我试图做这样的事情:

public static AddQuizFragment newInstance() {
    return (AddQuizFragment) EditQuizFragment.newInstance( /* arguments here */ );
}

这是导致ClassCastException

的原因

所有newInstance都设置了片段的参数包,使用片段从类中抽象出来。所以不是上面的,我做了以下的事情:

public static AddQuizFragment newInstance() {
    EditQuizFragment editQuizFragment = EditQuizFragment.newInstance(/* arguments here */);
    AddQuizFragment addQuizFragment = new AddQuizFragment();
    addQuizFragment.setArguments(editQuizFragment.getArguments());
    return addQuizFragment;
}

1 个答案:

答案 0 :(得分:2)

AddQuizFragmentEditQuizFragment,但EditQuizFragment不是AddQuizFragment

除非editQuizFragment是实现AddQuizFragment

的对象,否则您无法执行此操作
相关问题