Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: requestCode and resultCode

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?

like image 812
Tianxiang Xiong Avatar asked Aug 08 '11 17:08

Tianxiang Xiong


2 Answers

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.

like image 128
James Lim Avatar answered Nov 18 '22 19:11

James Lim


There is nothing special about the integers -- those constants are simply a convention. Your onActivityResult could be a single switch statement that dispatches results to methods to deal with them... no need for it to be giant. One should, of course, be using symbolic constants, as it appears you are.

like image 44
Earl Avatar answered Nov 18 '22 17:11

Earl