在创建扩展父片段的子片段时调用newInstance()

时间:2016-04-30 22:11:23

标签: java android class oop android-fragments

我有一个名为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()的正确方法是什么?

2 个答案:

答案 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的第二个实例。