Fragment开发小细节

在实际开发中,我们会发现,fragment会与外界有一些信息传递,例如activity传递信息进入fragment。

我们可以简单的用Intent,直接传递信息,获取信息。但是这种方式是以牺牲fragment的封装性为代价的。也就是说这个fragment不可以被再次复用。 或者有人会问,我们重新定义一个满足我们需求的构造函数,这样不就可以既不牺牲fragment的封装性,又满足我们的需求了么?的却,这个方法看上去能满足要求,但是实际开发中我们会发现一些问题。当我们的fragment重新被创建的时候,系统会自动调用无参的构造函数,所以这种方法也是失败的。

这个时候,谷歌为我们定义了一个机制。argument。

当我们想传递一些值进入到fragment中,我们可以先在fragment中定义一个方法newInstance()

public static MyFragment newInstance(int someInt) {
    MyFragment myFragment = new MyFragment();

    Bundle args = new Bundle();
    args.putInt("someInt", someInt);
    myFragment.setArguments(args);

    return myFragment;
}

然后我们可以在fragment中的create()调用

getArguments().getInt(“someInt”, 0);得到自己想要的值。

这个在后面某次面试的时候,被面试者问到了,为啥fragment传参数要argument?其实追本溯源,其实答案非常简单。我们在写代码的时候,需要知道怎么做,更需要知道为啥这么做。