How to Implement a Callback to Send Data from a Fragment to an Activity

  1. In the Fragment Class (MyFragment.java):

    Declare an Interface with as many abstract methods as required

    public interface Callbacks { public void runAbstractMethod(MyData mydata); }

    Remember only signiture is required for an interface

  2. In the Activity Class:

    Add Code to the class declaration to Implment the Interface in the Fragment class

    public class MainActivity extends Activity implements MyFragment.Callbacks {

    Implement the methods (Alt + Enter) creates.

    ``` @Override public void runAbstractMethod(MyData mydata){ //Get a reference to the bundle representing all of the MyData objects data //Uses a custom method of the MyData Class Bundle b = mydata.makeBundle(); //or if your class implements serializable you can use b.putSerialiazble(“myData”, (java.io.Serializable) mydata);

     //Create an Intent to Launch the Activity
     Intent intent = new Intent(this, MyDataActivity.class);
     intent.putExtra("MY_KEY", b);
     //Want to See a Result so use
     startActivityForResult(intent, "100");  }  ```
    
  3. Setup Communication from Fragment to Actviity

    In Fragment Class (MyFragment.java):

    #### Get a reference to the Activity Class

    ``` //Declare a variable as an Implementation of the Callbacks Interface private Callbacks activity;

    //Override the OnAttach method public void onAttach(Activity activity){ super.onAttach(activity); this.activity = (Callbacks)activity; } ```

    #### Run the Method:

    ``` //Use a Click Listener or Some event public void RuntheMethod(){ //Setup the data MyData mydata = ….

     //Run the Method
     activity.onItemSelected(mydata);  }  ```
    

    Make sure the Activity is registered in the Manifest File

  4. Receive Bundle from MainActivity in New Activity and pass to fragment

    In MyDataActivity.java:

    ``` MyFragment fragment = new MyFragment(); //after instantiating the fragment class Bundle args = getIntent().getBundleExtra(“MY_KEY”); fragment.setArguments(args);

    //use fragement manager and send it ```

  5. Receive Arguments - in Fragments OnCreate

    In MyFragment.java:

    ``` public void OnCreate(Bundle savedInstanceState){ super.onCreate(savedInstance);

     bundle b = getArguments();
     if (b != null){
         MyData mydata = new Flower(b);
     }  ```
    

Source: Lynda Building Adaptive Android Apps with Fragments