Android: requestCode и resultCode

Мне интересно, правильно ли я понимаю понятия requestCode и resultCode? В принципе, у меня есть произвольное целое число (requestCode), связанное с активностью. Например, в Notepad tutorial, мы имеем

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

Затем мы используем startActivityforResult (намерение, requestCode) для начала действия, например. деятельность "создать примечание". Мы делаем что-то в этом действии и возвращаем resultCode.

В родительской активности мы обнаруживаем resultCode с onActivityResult (requestCode, resultCode, намерение). Затем мы можем использовать requestCode, чтобы увидеть, какое действие возвращается, resultCode, чтобы увидеть результат этого действия, и намерение "дополнительные" для получения возвращенных данных.


Есть ли что-то особенное в встроенных методах resultCodes, например RESULT_CANCELED? Документация на сайте разработчика, кажется, предполагает, что встроенные результаты являются просто целыми числами.

И мне кажется, что это может стать действительно грязным? Например, если у меня было 10 возможных действий для запуска, тогда у меня была бы функция гигантская onActivityResult для проверки возвращаемой активности, не так ли?

Ответ 1

Есть ли что-то особенное в встроенных resultCodes, например RESULT_CANCELED? Документация на сайте разработчика, похоже, предположим, что встроенные результаты являются просто целыми числами.

Да. Эти коды являются "стандартными" ответами. Например, если начатое вами действие возвращает RESULT_CANCELED (в частности, активность ОС или стандартное приложение, такое как Камера), это означает, что действие было отменено. Эти стандартные результаты следует интерпретировать в соответствии с документацией. Фактически, ваши действия должны использовать эти стандартные результаты (чтобы другим разработчикам приложений было легче начинать ваши действия), если нет веских причин не делать этого.

И мне кажется, что это может стать действительно грязным? Например, если я было 10 возможных действий для запуска, тогда мне пришлось бы иметь гигантский onActivityResult для проверки возвращаемой активности, не так ли?

Да. Используйте оператор switch для их обработки.

Ответ 2

Нет ничего особенного в целых числах - эти константы - просто соглашение. Ваш onActivityResult может быть единственным оператором switch, который отправляет результаты методам, чтобы справиться с ними... нет необходимости, чтобы он был гигантским. Разумеется, нужно использовать символические константы, как кажется.