在实际开发中,我们会发现,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?其实追本溯源,其实答案非常简单。我们在写代码的时候,需要知道怎么做,更需要知道为啥这么做。