fragment argument用于传递信息,在父fragment启动activity时将父fragment中的信息传递给启动的activity,并转交给子fragment。
举例使用的文件关系
- CrimeActivity 子actviity
- CrimeFragment CrimeActivity托管的fragment
- CrimeListActivity 父activity
- CrimeListFragment 父activity托管的fragment
重写Intent方法(CrimeActivity)
首先先写父fragment传递值时调用的Intent方法。
Intent是在两个activity中传递消息,用此方法创建一个Intent,并添加进当前crime的extra信息。
在父fragment中调用
现在CrimeListFragment中的信息通过intent传递给了CrimeActivity。
附加argument给子fragment
通常的做法是,添加名为newInstance的静态方法给fragment类。使用这个方法完成fragment实例和Bundle对象的创建。newInstance这个方法是Activity调用的,在初始化fragment时显示特定的数据。
调用setArgument(Bundle)方法添加argument。
Bundle
Bundle,是Android开发中的一个类,用于Activity之间传输数据用。
Intent it = new Intent(A.this,B.class);
Bundle bundle = new Bundle();
bundle.putString("name","张三");
it.putExtrats(bundle);
startActivity(it);
这样就把name为张三这个数据从A传到了B。健为name,值为张三。
创建托管的CrimeFragment
在初始化fragment时显示特定的数据。因为这个CrimeActivity是被CrimeListFragment调用的。
调用newInstacne方法(新建实例)
修改onCreate函数(CrimeFragment)
初始化CrimeFragment时,就会得到传进来的值。
需要注意的是,调用getArgument前必须调用过setArgument。getArgument返回的是当前fragment携带的argument。
这样就可以将父fragment中的信息传递给子activity托管的fragment了。
为什么不使用extra传递信息?
argument能使fragment得到灵活性。fragment不应该知道activity使如何工作的。应该将值放入fragment的属性里。