Pass data between two fragments without using activity

主宰稳场 提交于 2019-12-17 12:08:40

问题


I want to pass data between two fragments without using activity and fragment activity.

I don't want to pass data between fragments using activity like this : Communicating with Other Fragments

Below is my scenario :

I have one Parent fragment and inside that there are two child fragments.Now my need is to pass data between these two fragments.How to achieve this?

I looked into this : Event Bus but not getting working example for fragments.

Is there any other alternative to pass data between fragments?

Any help will be appreciated.

Edited as per InnocentKiller's answer :

In FragmentOne , I have implemented :

    FragmentTwo = new FragmentTwo();
    Bundle bundle = new Bundle();
    bundle.putString("Hello", "My name is Siddharth");
    fragment.setArguments(bundle);

In FragmentTwo, I have implemented :

    Bundle bundle = this.getArguments();
    String myInt = bundle.getString("Hello","Test");
    mStartTripButton.setText(myInt);

回答1:


Best Way to exchange data between activity/fragments, fragment/fragment/, activity/activity, class/ class, make a common singleton class like:

public class DataHolderClass {
private static DataHolderClass dataObject = null;

private DataHolderClass() {
    // left blank intentionally
}

public static DataHolderClass getInstance() {
    if (dataObject == null)
        dataObject = new DataHolderClass();
    return dataObject;
}
private String distributor_id;;

 public String getDistributor_id() {
    return distributor_id;
 }

 public void setDistributor_id(String distributor_id) {
    this.distributor_id = distributor_id;
 }
}

now set from anywhere(Fragment, activity, class) at any event before you move to new screen

DataHolderClass.getInstance().setDistributor_id("your data");

now get anywhere(Fragment, activity, class)

 String _data = DataHolderClass.getInstance().getDistributor_id();



回答2:


You can use EventBus https://github.com/greenrobot/EventBus to pass any complex object around in Android.

Example passing an object from one Activity to another:

Add your object on the EventBus:

EventBus.getDefault().postSticky(anyObject);
startActivity(new Intent(getActivity(), SomeActivity.class));

Anywhere in SomeActivity:

AnyObject anyObject = EventBus.getDefault().getStickyEvent(AnyObject.class);

This examle is just to show that it works across Activities, you can call getStickyEvent to get anyObject anywhere in your code.

So, you can post an object in Fragment A, and use getStickyEvent in fragment B to retrieve it.

This is especially convenient if you have a lot of arguments and/or complex objects you wish to move from one place to the other. Simply create a single 'holder' object containing getter/setters for the arguments and then pass it along. Much simpler than having to pass them separately and somehow serialize the complex objects.




回答3:


I think you are trying to pass data from one fragment to another fragment, So try using below code.

Use a Bundle, So write below code in first fragment from where you want to send data.

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putString("message", "From Activity");
fragment.setArguments(bundle);

and to retrieve that data, use the following code in your other fragment

String strtext=getArguments().getString("message");


来源:https://stackoverflow.com/questions/27484245/pass-data-between-two-fragments-without-using-activity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!