2011-07-03 14 views
7

Tengo una actividad que espera que el usuario seleccione un elemento, pero el usuario puede elegir hacer clic en el botón Atrás sin seleccionar un elemento. Esta actividad de "selección de elementos" se inicia con startActivityForResult().¿Debo configurar explícitamente RESULT_CANCELED?

Me preguntaba dos cosas. En primer lugar, ¿es suficiente con solo establecer un resultado (RESULTADO_OK) cuando el elemento está realmente seleccionado, es decir, ¿puedo confiar en que el resultado no se establezca en RESULTADO_OK si no lo configuro explícitamente?

En segundo lugar, si esto no es suficiente para confiar en el resultado (no inicializado), ¿está bien llamar a setResult() varias veces, la primera vez "inicializando" el resultado a RESULT_CANCELED y luego llamando a SetResult (RESULT_OK) después de que el usuario selecciona un artículo y antes de terminar la actividad?

Respuesta

9

Desde el documentation:

Si una actividad infantil falla por cualquier motivo (por ejemplo, chocando), la actividad padre recibirá un resultado con el código RESULT_CANCELED.

Así, el resultado es que ya RESULT_CANCELED, si no se especifica explícitamente el otro código. Cuando el usuario sale de su aplicación con el botón "Atrás", también recibe RESULT_CANCELED.

+0

gracias lo vi en la documentación, que es lo que provocó la pregunta. El caso que estoy describiendo no es que la actividad "falle". No está claro a partir de la documentación de la API de Android que es una suposición segura de que RESULT_CANCELED es el valor predeterminado, ni está claro si está bien llamar a setResult más de una vez. –

+0

Otra línea en la documentación, para el método onActivityResult: "ResultCode será RESULT_CANCELED si la actividad lo devolvió explícitamente, no devolvió ningún resultado o se bloqueó durante su operación". Entonces, si no devuelve ningún resultado, antes de que el usuario salga de actividad con el botón Atrás, el resultado es RESULT_CANCELLED. – Dirol

+0

Acerca de llamar a setResult más de una vez, no está definido en el documento. Entonces no confiaría en eso. Incluso si puede funcionar para las API actuales, no hay garantía de que funcione en el futuro. – Dirol

1

Puede usar setResult(RESULT_CANCELED) en cada Activity y llamar al finish().

En el OnActivityResult modificado, haga lo que he mencionado si se cancela el código de resultado.

Cuestiones relacionadas