我想知道在创建新片段时直接设置对象是一种很好的做法,如下例所示,或者我们应该始终使对象Parcelable并通过intent吗?
公共类示例扩展Fragment {
private Object obj1;
public static sample newInstance(Object obj) {
sample fragment = new sample();
fragment.setObj1(obj);
return fragment;
}
public void setObj1(Object obj1) {
this.obj1 = obj1;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
}
在任何一种情况下,如果某人能够告诉我为什么一个人比另一个人更好会有所帮助呢?
答案 0 :(得分:1)
是的,您必须将setArguments与包含所有Parcelables的Bundle一起使用。
这是因为在重新创建时,您的Fragment只能访问它getArguments(),并且所有局部变量都将为null(或默认为基元)。
要走的路是在你的newInstance
public static sample newInstance(String obj) {
sample fragment = new sample();
Bundle args = new Bundle();
args.putString(STRING_PARAM_KEY, obj);
fragment.setArguments(args);
return fragment;
}
然后在你的onCreateView
中 obj1 = getArguments().getString(STRING_PARAM_KEY);
只需在你的班级中声明一个关键的常量
static final String STRING_PARAM_KEY = "string_param_key";