fragment不要用构造函数传参数
为什么fragment不能用构造函数传参数
我们可以看一下Fragment的源码
public Fragment() {
}
我们发现,fragment的构造函数是空的,
所以他和普通类的创建对象的方式不太一样
然后我们看
public static Fragment instantiate(Context context, String fname) {
return instantiate(context, fname, null);
}
是instantiate这个方法创建了fragment对象
看看instantiate
Class<?> clazz = sClassMap.get(fname);
if (clazz == null) {
// Class not found in the cache, see if it's real, and try to add it
clazz = context.getClassLoader().loadClass(fname);
if (!Fragment.class.isAssignableFrom(clazz)) {
throw new InstantiationException("Trying to instantiate a class " + fname
+ " that is not a Fragment", new ClassCastException());
}
sClassMap.put(fname, clazz);
}
Fragment f = (Fragment)clazz.newInstance();
if (args != null) {
args.setClassLoader(f.getClass().getClassLoader());
f.mArguments = args;
}
return f;
我们发现Fragment是用反射的方式创建的
而且有mArguments来控制参数
那么当然要用特定的方式来传递参数了
我们可以用bundle对象来传递参数
Bundle bundle = new Bundle();
bundle.putSerializable("entity", entity);
fragment.setArguments(bundle);