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

各位看官们大家好,上一回中咱们说的是Android中Fragment之间数据传递的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,我们在上一回中介绍了使用Fragment的参数在Fragment之间传递数据,使用该方法传递数据时不用区分Fragment是否是在同一个Activity中,只需要使用Fragment的静态方法来创建Fragment对象就可以。另外,我们可以在Fragment中创建一个接口,然后在托管Fragment的Activity中实现该接口。实现接口时通过Fragment的静态方法来传递数据,接着在Fragment中调用接口中的方法来完成数据传递功能,下面是具体的操作的步骤,请大家参考:

  • 1.在FragmentB中创建接口:OnFragmentInteractionListener,该接口中只有一个抽象方法:
public interface OnFragmentInteractionListener {
    
    
    void onFragmentInteraction(Uri uri);
}
  • 2.在ActivityA中实现该接口,并且重写接口中的抽象方法,实现内容:给FragmentA2和FragmentB传递数据;
@Override
public void onFragmentInteraction(Uri uri) {
    
    
    Log.i(TAG, "onFragmentInteraction: ");
    mFragmentA2 = FragmentA2.newInstance("onFragmentInteraction","Data2");
    mFragmentB = FragmentB.newInstance("onFragmentInteraction","DataB");
}
  • 3.在FragmentB中创建公有方法来使用接口中的抽象方法传递数据:
public void onButtonPressed(Uri uri) {
    
    
    if (mListener != null) {
    
    
        Log.i(TAG, "onButtonPressed: ");
        mListener.onFragmentInteraction(uri);
    }
}
  • 4.调用Fragment中的公有方法来传递数据,然后验证数据是否传递成功;
//使用Fragment的公有方法来传递数据,真正传递数据的操作在CallBack:onFragmentInteraction
mFragmentA2.onButtonPressed(null);
mFragmentB.onButtonPressed(null);
//验证数据是否传递成功
mFragmentA1.getDataFromParam();
mFragmentA2.getDataFromParam();
mFragmentB.getDataFromParam();
  • 5.在FragmentB中的onAttach方法中初始化监听器,最后在onDetach方法中销毁监听器对象;
@Override
public void onAttach(Context context) {
    
    
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
    
    
        mListener = (OnFragmentInteractionListener) context;
    } else {
    
    
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    
    
    super.onDetach();
    mListener = null;
}

看官们,上面的代码有点绕,不过它通过一个接口实现了不同Fragment之间的数据传递,而且也可以在Activity和Fragment之间进行数据传递。最重要的是相互传递数据的Fragment之间不需要知道对方的细节,只需要使用接口中的方法就能完成数据传递,这样降低了Fragment之间的遇合。

另外,我想说的是上面代码中的接口名称,以及公有方法都是使用AST创建Fragment时自动生成的(前提是没有去掉工厂方法和接口方法的复选框,在4.0版本的AST上已经没有复选框了,默认生成接口方法和公有方法)。由此可见,这也是官方推荐的操作方法,希望大家在项目中使用这种方法来完成Fragment之间的数据传递.

各位看官,关于Android中Fragment之间数据传递的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

猜你喜欢

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