通过new(Var v)或setArguments(bundle)将变量发送到Fragment?

时间:2014-03-01 12:39:08

标签: android fragment

官方指南建议开发人员使用setArguments发送变量。但是我更喜欢Fragment f = new Fragment(int i);因为我觉得它更自然......那就好吗?

1 个答案:

答案 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()检索。