Android: hace que la actividad A espere a que la actividad B termine y devuelva algunos valores
Tengo un programa que necesita …
- En la
Activity A
, haga algunos trabajos - Inicie la
Activity B
(unWebView
), deje que el usuario rellene alguna información y luego recoja el resultado - Luego, finalmente procesar los datos
Actualmente lo configuro así:
- Problema en la adición de elementos comunes de arraylist en el arraylist tercero que utiliza para el lazo
- Eclipse: inhabilita la compilación de archivos XML mientras está en perspectiva de Java
- ¿Cómo puedo convertir la entrada de Facebook created_time a la zona horaria del usuario?
- Opengl es 2.0 dibujar superposición de mapa de bits en vídeo
- Acerca de los nuevos métodos y métodos obsoletos en las API de Android
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?).
- Cómo dibujar una línea suave a través de un conjunto de puntos con las curvas Bezier?
- ¿Cómo actualizar el lanzador de aplicaciones después de activar / desactivar un alias de actividad?
- Utilizando RxJava para la validación de inicio de sesión de correo electrónico, un observable está emitiendo dos veces
- Android Thread.start () CalledFromWrongThreadException
- Enviar blob o matriz de bytes en XML
- La llamada "Android Create" falla en Windows 7 - falta JDK
- android error: No se pudo leer los descriptores del archivo de canal de entrada desde el paquete
- ¿Es este método más rápido que Math.random ()?
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.