创建新片段时,可以在捆绑软件上使用setters

时间:2019-01-10 14:49:04

标签: android android-fragments android-bundle

当我第一次开始android开发时,它被深深地扎根在我的脑海里,创建片段应该始终通过您创建的静态方法来完成,该方法使用片段的默认构造函数,通过bundle分配参数,在片段上设置bundle并然后返回它。例如:

public static MyFragment newInstance() {
    MyFragment frag = new MyFragment();
    Bundle args = new Bundle();
    args.putInt("lifesAnswer", 42);
    frag.setArguments(args);
    return frag;
}

据我模糊的理解,我们这样做的原因是因为android现在将隐式地处理片段及其参数的还原,如果结果发生并且需要还原,则无需任何额外的工作。

现在,如果我在这里使用fragments接口设置可以作为参数传递到newInstance()的任意值,该怎么办?例如:

public static MyFragment newInstance(int someValue) {
    MyFragment frag = new MyFragment();
    frag.setInstanceValue(someValue); // using a public setter
    return frag;
}

为清楚起见,setInstanceValue()就是您的标准设置器,例如:

public void setInstanceValue(int value) {
    this.value = value;
}

此方法是否完全合法且安全?对于这里的实际情况,我有一个片段,它将在viewpager中多次重复使用,而唯一不同的是一些文本和容器背景图像。我可以传递已解析的整数值并将其设置在捆绑软件中,例如,通过R.String.my_string,然后将其设置在捆绑软件中,以后再使用它,但这让我开始思考。实施第二种方法是否可以接受?或者我应该始终使用第一种方法。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

class YourFragment extends Fragment {

String valueOne;

String valueTwo;

public static YourFragment create(String valueOne, String valueTwo) {
    YourFragment fragment = new YourFragment();
    fragment.valueOne = valueOne;
    fragment.valueTwo = valueTwo;
    return fragment;
}

}

这里不需要使用设置器。

或使用FragmentArgs https://github.com/sockeqwe/fragmentargs库。