我有一个名为TheParent的父DialogFragment和一个名为TheChild的子Fragment,它扩展了TheParent。
但是,我需要能够在TheParent中初始化一些变量,即使我正在实例化TheChild,所以我尝试的是:
在父母
中public static TheParent newInstance(int myInt) {
Bundle args = new Bundle();
TheParent fragment = new TheParent();
args.putInt(ARGUMENT_MYINT, myInt);
fragment.setArguments(args);
return fragment;
}
然后在孩子身上:
public static TheChild newInstance(int myInt) {
return super.newInstance(myInt);
}
然而,由于静态上下文,它不喜欢我这样做。
在TheChild上调用newInstance()并让它调用父项的newInstance()的正确方法是什么?
答案 0 :(得分:1)
静态方法,如TheParent中的新实例,是" class"方法。因此,您应该调用TheParent.newInstance(...),而不是调用super.newInstance。只记得调用静态方法的方法是使用类名。希望能帮助到你。 总而言之,TheChild中的newInstance方法的返回值为" TheChild"。这意味着返回一个" TheParent"实例是不可能的,它会导致编译时错误,一旦您更改TheChild中的代码,您将看到: "返回super.newInstance()" to" TheParent.newInstance()"。
答案 1 :(得分:0)
这是我不得不重复子类中所有逻辑的原因:
public static TheChild newInstance(int myInt) {
TheChild fragment = new TheChild();
fragment.setArguments(TheParent.newInstance(myInt).getArguments());
return fragment;
}
当然,此解决方案会暂时创建TheParent
的第二个实例。