Android

Fragment argument

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信息。

image 16

在父fragment中调用

image 17

现在CrimeListFragment中的信息通过intent传递给了CrimeActivity。

附加argument给子fragment

通常的做法是,添加名为newInstance的静态方法给fragment类。使用这个方法完成fragment实例和Bundle对象的创建。newInstance这个方法是Activity调用的,在初始化fragment时显示特定的数据。

image 14

调用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调用的。

image 15

调用newInstacne方法(新建实例)

修改onCreate函数(CrimeFragment)

image 29

初始化CrimeFragment时,就会得到传进来的值。

需要注意的是,调用getArgument前必须调用过setArgument。getArgument返回的是当前fragment携带的argument。

这样就可以将父fragment中的信息传递给子activity托管的fragment了。

为什么不使用extra传递信息?

argument能使fragment得到灵活性。fragment不应该知道activity使如何工作的。应该将值放入fragment的属性里。

发表评论