官方指南建议开发人员使用setArguments发送变量。但是我更喜欢Fragment f = new Fragment(int i);
因为我觉得它更自然......那就好吗?
答案 0 :(得分:2)
如果你想在初始化期间向你的片段发送数据,你应该使用setArguments
,因为如果以后系统决定重新创建你的片段,它会选择默认构造函数(没有数据),所以你应该去通过以下方式:
public class Test extends Fragment {
....
public static Test newInstance(<args>) {
Test myFragment = new Test();
Bundle args = new Bundle();
//put data to bundle
myFragment.setArguments(args);
return myFragment;
}
....
}
来自文档:
默认构造函数Fragment()
。每个片段都必须有一个空构造函数,因此可以在恢复其活动状态时进行实例化。强烈建议子类没有带参数的其他构造函数,因为在重新实例化片段时不会调用这些构造函数。相反,参数可以由调用者使用setArguments(Bundle)提供,稍后由Fragment使用getArguments()检索。