Android: requestCode and resultCode

androidstartactivityforresult

I'm wondering if I am understanding the concepts of requestCode and resultCode properly? Basically, I have an arbitrary integer (the requestCode) associated with an activity. For example, in the Notepad tutorial, we have

private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;

We then use startActivityforResult(intent, requestCode) to start an activity, e.g. the "create note" activity. We do something in that activity and return a resultCode.

In the parent activity we detect the resultCode with onActivityResult(requestCode, resultCode, intent). We can then use the requestCode to see which activity is being returned, the resultCode to see the result of that activity, and the intent's "extras" to get returned data.


Is there anything special about the built-in resultCodes, like RESULT_CANCELED? The documentation on the developer site seems to suggest that the built-in results are simply integers.

And it seems to me that this could get really messy? For example, if I had 10 possible activities to launch, then I'd have to have a giant onActivityResult function to check which activity's being returned, wouldn't I?

Best Answer

Is there anything special about the built-in resultCodes, like RESULT_CANCELED? The documentation on the developer site seems to suggest that the built-in results are simply integers.

Yes. These codes are "standard" responses. For example, if an activity you started returns RESULT_CANCELED (in particular, an OS activity or a standard app such as the Camera), that means the activity was cancelled. These standard results should be interpreted according to the documentation. In fact, your activities should use these standard results (so that other app developers have an easier time starting your activities) unless there is a strong reason not to do so.

And it seems to me that this could get really messy? For example, if I had 10 possible activities to launch, then I'd have to have a giant onActivityResult function to check which activity's being returned, wouldn't I?

Yes. Use a switch statement to handle these.