Martin
Martin

Reputation: 24316

Android: Callback to fragment from DialogFragment?

I know to pass back something from a fragment to its calling activity you can use onAttach which has the "activity" parameter. You can set the activity to variable and call an interface on it later. So passing data from the fragment back to the activity. All great.

I would like to do the same thing but this time i have a standard fragment and I want to call a DialogFragment and then have the DialogFragment call back to the original fragment but I can't use onAttach is wants a Activity.

Anyone know the best way of doing this ?

Thanks

Upvotes: 2

Views: 1106

Answers (2)

Nicolas Tyler
Nicolas Tyler

Reputation: 10552

Obviously you could just make things public in your activity and set them from your fragment. But then you have to keep references to your activity, and possibly have unwanted public variables and/or setters.

You could use EventBus and you would not need any of that.

In your activity you need to register an event

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

// This method will be called when a MessageEvent is posted
public void onEvent(MessageEvent event){
    Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}

Then you can simply call your event from your fragment or anywhere you like,

EventBus.getDefault().post(new MessageEvent("Hello everyone!"));

Some more information on EventBus can be found here And another possibly useful tutorial.

Upvotes: 2

PPartisan
PPartisan

Reputation: 8231

One way to contact another fragment from there is to access it in the implemented method in your Activity:

//In your Activity...

@Override
public void callbackFromFragmentA(){
    FragmentB fragment = (FragmentB) getFragmentManager.findFragmentById(android.R.id.content);
    if (fragment != null) {
        fragment.callFragmentMethod();
    }
}

Upvotes: 1

Related Questions