Android - getTargetFragment and setTargetFragment - What are they used for Android - getTargetFragment and setTargetFragment - What are they used for android android

Android - getTargetFragment and setTargetFragment - What are they used for


Use case = 2 fragments hosted by the same activity.

Where startActivityForResult() establishes a relationship between 2 activities, setTargetFragment() defines the caller/called relationship between 2 fragments.

setTargetFragment(target) lets the "called" fragment know where to send the result. onActivityResult() is called manually in this case.

public class Caller extends Fragment     Fragment called = Called.newInstance()     called.setTargetFragment(this)public class Called extends DialogFragment   intent = amazingData   getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent)


i finally found out how to use setTarget in a fragment and wanted to share. its quite useful when you want to communicate from fragment to fragment.

here is an example: let's say you wanted to show a dialog and when it closes you want to do some action.

so in your fragment1 that will use the dialog you could do this:

myDialogFragment.setTargetFragment(fragment1, myDialogFragment.REQ_CODE);

and in your fragment that called the dialog you would need to override onActivityResult like this:

@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {    if(requestCode == CoDDialogFragment.REQ_CODE)        exit(); //or whatever you want to do here}

and in the myDialogFragment you could do this:

TellTargetYouGotResults(REQ_CODE);//...private void TellTargetYouGotResults(int code) {    Fragment targetFragment = getTargetFragment(); // fragment1 in our case    if (targetFragment != null) {        targetFragment.onActivityResult(getTargetRequestCode(), code, null);    }}

where REQ_CODE can be any int of course . Very useful for fragment to fragment communication. but i still prefer event bus as sometimes after sending data to a target its view might have already been destroyed (incase its a fragment) and then if you try to update the view in onActivityResult you'll get a crash. so i'd say its useful to just pass data along but not update the UI unless you've done a 'add' fragment transaction and not a replace (which destroys the view but keeps state).


From what I was able to take away from reading the docs was that these methods are another way of accessing data from another Fragment. Here is a sample project that I wrote that demonstrates a single use case for using these methods. I'm sure there are more use cases though...