Android: hace que la actividad A espere a que la actividad B termine y devuelva algunos valores

Tengo un programa que necesita …

  1. En la Activity A , haga algunos trabajos
  2. Inicie la Activity B (un WebView ), deje que el usuario rellene alguna información y luego recoja el resultado
  3. Luego, finalmente procesar los datos

Actualmente lo configuro así:

En la Activity A :

 ... startActivityForResult(this, new Intent(ActivityB.class)); ... protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... //get result from data, do something with it ... } 

Esto parece un enfoque incómodo porque necesito dividir la tarea en muchas partes diferentes. Tengo que manejar las excepciones lanzadas en todas las partes y es inconveniente hacerlo de esta manera. ¿Hay un método mejor?

Además, después del paso (3) anterior, voy a repetir este paso varias veces, cada vez que publique el resultado final en una vista de texto. Creo que eso significa que necesito ponerlos en un AsyncTask , pero eso lo hace aún más difícil (¿dónde debería onActivityResult ser puesto?).

La respuesta simple es que no hay otra manera. Esto es lo que significa hacer en Android. Lo único, creo, que te falta es pasar un código de solicitud a la actividad B. Sin ella, no sería capaz de diferenciar qué otra actividad devuelve resultado a la actividad A.

Si está invocando diferentes actividades de su A, utilice el parámetro requestCode diferente al iniciar la actividad. Además, puede pasar cualquier dato a la actividad B usando el mismo enfoque de Intent (ok, casi cualquier):

 public final static int REQUEST_CODE_B = 1; public final static int REQUEST_CODE_C = 2; ... Intent i = new Intent(this, ActivityB.class); i.putExtra(...); //if you need to pass parameters startActivityForResult(i, REQUEST_CODE_B); ... //and in another place: Intent i = new Intent(this, ActivityC.class); i.putExtra(...); //if you need to pass parameters startActivityForResult(i, REQUEST_CODE_C); 

Entonces en su on ActivityResult :

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode) { case REQUEST_CODE_B: //you just got back from activity B - deal with resultCode //use data.getExtra(...) to retrieve the returned data break; case REQUEST_CODE_C: //you just got back from activity C - deal with resultCode break; } } 

OnActivityResult se ejecuta en el subproceso GUI, por lo tanto, puede realizar las actualizaciones que desee directamente aquí.

Finalmente, en la Actividad B, tendrías:

 Intent resultIntent = new Intent(); resultIntent.putExtra(...); // put data that you want returned to activity A setResult(Activity.RESULT_OK, resultIntent); finish(); 

No estoy seguro de por qué necesita AsyncTask para manejar los resultados.

  • Entender el desmontaje del código Dalvik?
  • ¿Cómo se muestra un diálogo de alerta sólo en la primera ejecución de mi aplicación?
  • Vida útil de los objetos en Java vs .Net
  • Agregar preferencias dinámicas de la casilla de verificación en Android y mostrarlas en la pantalla de preferencias?
  • Determinar si dos objetos Java son de la misma clase
  • Cómo probar Menú
  • Programáticamente establecer la sugerencia de texto de edición en android?
  • Android Studio 2.2 y Jack están siendo bloqueados por Avira Antivirus
  • Creación de GoogleApiClient para múltiples actividades
  • Cómo evitar "Actualizar carpetas externas" en el desarrollo de Android en Eclipse
  • Cómo tratar los problemas de la red
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.