各位看官们大家好,上一回中咱们说的是Android中Fragment之间数据传递的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!
看官们,我们在前面两个章回中已经介绍了Fragment之间数据传递的方法,本章回中我们将介绍另外一个传递的方法:Fragment参数。下面是具体的操作步骤:
- 1.在Fragment中创建两个变量,简单起见我创建了String类型的变量;
private String mParam1;
private String mParam2;
- 2.创建Bundle类型的对象,并且通过该对象的putString方法把String类型的数据传递到该对象中:
- 3.给Fragment设置参数,通过Fragment的
setArguments
(args)方法把步骤2中的Bundle对象传递给Fragment;为了代码简洁,我把步骤2和3封装成Fragment的静态方法以便使用; 这点借用了单例模式的思想,既保持了对象的唯一性,双隐藏了参数操作的细节,可谓一举两得。
public static FragmentB newInstance(String param1, String param2) {
FragmentB fragment = new FragmentB();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
- 4.从Fragment的参数中获取数据,通过Fragment的getArguments()方法获取步骤2中的Bundle对象,然后通过该对象的getString()方法获取传递给当前Fragment的数据;注意使用参数时需要做非空检查,因为不是所有Fragment之间都需要传递数据。为了代码简洁,我把此步骤封装成了Fragment的公有方法,以便使用。
public void getDataFromParam() {
if(getArguments() != null){
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
Log.i(TAG, "getDataFromParam: "+mParam1+" "+mParam2);
}else {
Log.i(TAG, "getDataFromParam: param is null");
}
- 5.使用Fragment的静态方法来创建对象,并且传入需要传递的数据(通过静态方法的参数来传入数据);
//使用默认构造函数来创建Fragment对象
// mFragmentA1 = new FragmentA1();
// mFragmentA2 = new FragmentA2();
//使用参数来创建Fragment对象
mFragmentA1 = FragmentA1.newInstance("FragmentA1","Data1");
mFragmentA2 = FragmentA2.newInstance("FragmentA2","Data2");
- 6.验证是否可以获取到数据,我们是在Activity的onResume方法中使用步骤5中的仅有方法来获取数据;
protected void onResume() {
super.onResume();
mFragmentA1.getDataFromParam();
mFragmentA2.getDataFromParam();
}
看官们,上面的代码和步骤比较多,其实核心内容就两点:
- 使用setArgument方法传入数据;
- 使用getArguments方法获取数据。
不过数据是Bundle类型的对象,这点注意一下就可以。在实际项目中大家可以灵活使用它们,比如我就把它们封装了Fragment的方法。下面是程序的运行结果,请大家参考:
//我们使用静态方法创建了FragmentA1和A2,这里的log和创建时传入的数据一致
I/FragmentA1?DataStorage: getDataFromParam: FragmentA1 Data1
I/FragmentA2?DataStorage: getDataFromParam: FragmentA2 Data2
//我们使用默认构造方法创建了FragmentB,没有传入数据,这里的log显示参数中无数据
I/FragmentB?DataStorage: getDataFromParam: param is null
各位看官,关于Android中Fragment之间数据传递的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!