当我第一次开始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
,然后将其设置在捆绑软件中,以后再使用它,但这让我开始思考。实施第二种方法是否可以接受?或者我应该始终使用第一种方法。
答案 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库。