How to pass result from second fragment to first fragment

android, android-fragments

Solution

Update

Activity is the parent controller and should take responsibility for handling those events raised by its fragments/views, which concern something outside of the scope of fragment/view itself.

A Fragment is to act as a sub-controller of Views it hosts. All the events and communication between its own views, the fragment should handle itself. When there is an event outside of a fragment's scope and responsibilities (like sending data to another fragment), that event should be escalated to its parent controller, the Activity.

Old

From this tutorial : http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity

Its better to let the activity apply changes to its fragment than passing values directly between fragments. Let your Activity implement a `FragmentListener` interface with `onQuery(Bundle data)` and `onResult(Bundle data)` methods.

Create a `FragmentListener` varaible in each of your fragments and then override `onAttach()` of each fragment as:

 public void onAttach(Activity activity) {
    super.onAttach(activity);

    //---register parent activity for events---
    try{
        fragmentListener = (FragmentListener) activity;
    }catch (ClassCastException e)
    {
        throw new ClassCastException("Parent activity must implement interface FragmentListener.");
    }
  }

This will enforce your child fragments to be automatically registered to parent Activity.

Also, remember to release `fragmentListener` reference in `onDetach()`.

Now you can call your Activity from fragments.

On the other side, your Activity can always search for a fragment using `getFragmentManager().findFragmentByTag("fragmentA")` or `findFragmentById("FragmentA")`. If it can find your Fragment, Then it can cast it into your `FragmentA` class and call its methods. Same can be done with `FragmentB` or any other fragment..

Problem

In my app I have two fragments say fragmentA and FragmentB. When I click on a button in fragmetA, a list is opened in fragmentB. Now when I select an item from list in fragmentB I want the result to be passed to fragmentA. I am using only one TabActivity for all fragments. When list item is selected in fragmentB I am popping out fragmentB from stack so that I can directly go back to fragmentA. Does anyone knows how to pass result to previous fragment. Thanks.

Original source

Related problems