将数据从片段传递到片段

时间:2015-02-16 08:49:42

标签: android android-activity android-fragments bundle

我有两项活动,分别是活动A和活动B.

活动A包含碎片AF1,AF2。 活动B包含碎片BF1,BF2。

目前我在AF1。

  1. 我们如何将数据(包)从AF1传递到AF2?
  2. 我们如何将数据(包)从AF1传递到BF2?

2 个答案:

答案 0 :(得分:0)

第一种方法是使用接口。以下是步骤的细分:

  • 在AF1片段中创建一个接口 - 将调用该接口中的方法,并通过传递给它的参数传回数据。在您的活动中,您实现该接口并覆盖该方法。调用该方法后,您可以在AF2中创建另一个方法,您可以轻松调用并传递相应的值。

本教程中显示了上述过程:how to communicate between fragments and activities

<强> FragmentOne.java

public class FragmentOne extends Fragment{

    private Activity activity;

    @Override
    public void onAttach(Activity act){
       super.onAttach(act);
       activity = act; 
    }

    @Override
    public View onCreateView(..........){
        /* somethind was clicked here*/
        try{
           ((OnSomethingClickedListener) activity).updateActivity(position);
        }catch(ClassCastException e){}

      return view;
    }

    public interface OnSomethingCllickedListener{
       void updateActivity(int position);
    }
}

在您的活动中,实施界面并覆盖上述方法:

public class ActivityOne extends Activity implements FragmentOne.OnSomethingCllickedListener{

  @Override
  public void onCreate(Bundle saveInstanceState){
   /* as usual here */
  }

  @Override
  public void updateActivity(int position){
     /* call FragmentTwo's method here to update the view based on the position of item clicked here*/
     FragmentTwo.updateView(position);
  }
}

其次,要将您的活动与片段分离,请使用EventBus库。这很简单,就像这样:

  • 下载jar文件并将其添加到您的项目中。
  • 创建活动类
  • 注册活动中的活动(在onDestroy中取消注册)
  • 如果您想通知活动的活动,只需致电EventBus&#39; post方法并传回相应的数据。
  • 在您的活动中,您需要一个方法 onEvent(YourEventClassName event),然后您可以根据需要将值分别传递给您的片段。

我希望这会有所帮助。

答案 1 :(得分:-1)

传递和检索数据的代码:

Bundle bundle =new Bundle();

bundle.putString("message", message);

Frag1 _fragment = new Frag1();

fragmentTransaction.replace(android.R.id.content, _fragment);

fragmentTransaction.commit();

Bundle bundle=getArguments(); //get data

if(bundle!=null)
{
   message=bundle.getString("message")  ;
}