首页 > 解决方案 > 创建新片段时,我可以在捆绑包上使用设置器吗

问题描述

当我第一次开始 android 开发时,我一直在脑海中钻研,创建一个片段应该始终通过您创建的静态方法来完成,该方法使用片段默认构造函数,通过包分配参数,在片段上设置包,然后返回它. 例如:

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

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

现在,如果我在这里使用片段接口来设置可以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;
}

这种方法是否完全合法且安全。对于此处的实践上下文,我有一个片段将在视图页面中多次重用,所有不同之处在于一些文本和容器背景图像。我可以只传递解析的整数值并将它们设置在包中,例如传递R.String.my_string然后将其设置在包中并稍后使用它,但这让我思考。实施第二种方法是否可以接受,或者我应该始终使用第一种方法。

标签: androidandroid-fragmentsandroid-bundle

解决方案


你可以这样做:

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;
}

}

这里不需要使用 setter。

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


推荐阅读