Fragment由Activity托管,当启动这个Activity并且想显示Fragment时,几乎都需要向Fragment传递一个或几个数据,而Fragment则根据传递过来的这几个参数显示不同的画面。下面就是介绍如何向Fragment传递数据。
- 当不需要传递数据时
Activity类里
FragmentManager fm=getSupportFragmentManager();
android.support.v4.app.Fragment sFragment=fm.findFragmentById(R.id.fragmentContainer);
if(sFragment==null){
//重点
sFragment=new SFragment();
fm.beginTransaction().add(R.id.fragmentContainer, sFragment).commit();
}
- 当需要传递数据时,比如传递字符串“text”给fragment
在fragment的类里给Fragment类创建生成实例的方法,在方法里添加数据
public static SFragment newInstance(String text){
Bundle args=new Bundle();
args.putString("categoryName", text);
SFragment sFragment=new SFragment();
sFragment.setArguments(args);
return sFragment;
}
在Activity类里通过上面的方法生成实例
FragmentManager fm=getSupportFragmentManager();
android.support.v4.app.Fragment sFragment=fm.findFragmentById(R.id.fragmentContainer);
if(sFragment==null){
//重点
sFragment=SFragment().newInstance("text");
fm.beginTransaction().add(R.id.fragmentContainer, sFragment).commit();
}
就这样,fragment已经获得了传递过来的数据text.
如果你看懂了上面的代码,你一定会说,根本就没传过来,这样怎么根据传过来的数据显示不同的画面。没错,虽然这时候fragment已经有了text这个数据,可是你还得让这个text显示出来才能发挥作用。
让这个text显示出来
text=getArguments().getString("categoryName");