问题
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