一起Talk Android吧(第二百四十六回:Android中Fragment之间的数据传递四)

各位看官们大家好,上一回中咱们说的是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();
}

看官们,上面的代码和步骤比较多,其实核心内容就两点:

  1. 使用setArgument方法传入数据;
  2. 使用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之间数据传递的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

猜你喜欢

转载自blog.csdn.net/talk_8/article/details/106966491