当我第一次开始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中多次重复使用,它的不同之处在于一些文本和容器背景图像。我可以只传递解析的整数值并将其设置在bundle中,例如传递R.String.my_string
,然后将其设置到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图书馆