Sean Kilb
Sean Kilb

Reputation: 979

send data to fragment from another activity in android

I have an activity which is a container for several fragments. One of the fragments starts another activity and from the second activity I want to send some data to one of the fragments. How can I do that? Basically the first activity stays beyond the second one and one of the EditViews will be updated with a new value when the second activity closes. I could've used an intent but how can I send it if the activity is already started? Thank you.

Upvotes: 0

Views: 4319

Answers (2)

Boardy
Boardy

Reputation: 36237

You would need to start your second activity using startActivityForResult(). In your second activity before you finish it, you need to add the data to a bundle pass this to an intent and then set the result to the intent.

Bundle bundle = new Bundle();
bundle.putString("myData", "myValue");
Intent intent = new Intent();
intent.putExtra(bundle);
setResult(intent, 0);
finish();

And then in activity 1 there should be an onactivityresult method which retrieves the value from the intent and sets it where you want in your fragment

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bundle bundle = data.getData();
string value = bundle.getString("myData");
}

I'm not sure if I have it exactly right as remembering it at the top of my head but should be enough to get you started I think.

Upvotes: 2

RajeshVijayakumar
RajeshVijayakumar

Reputation: 10630

If you want to pass data back to its containing activity from your fragment, can do it by declaring an interface handler and through that interface pass the data. And ensure your containing activity implements those interfaces.

For example: In your fragment, declare this interface as follows :

 public interface CallBackInterface {
      public void onCallBack(String param);
 }

 //Declare this interface in your fragment
 CallBackInterface callBk;

 @Override
 public void onAttach(Activity a) {
     super.onAttach(a);
     callBk= (CallBackInterface ) a;
 } 

Within your fragment, when you need to handle the passing of data, just call it on the "callBk " object:

 public void  callBack(String param) {
     callBk.onCallBack(param);
 }

Finally, in your containing activity which implements CallBackInterface ...

  @Override
  public void onCallBack(String param) {
       Log.d("TAG","hi " + param);
  }

Upvotes: 2

Related Questions