¿Cómo puedo pasar valores entre Actividades en Android?

Esta es la navegación de mi aplicación:

Activity1 llama Activity2Activity2.finish() , llama Activity3Activity3.finish()

Cuando Activity3 termina, llama al método onResume de Activity1 . Ahora, ¿cómo puedo pasar un valor de Activity3 a Activity1 ?

6 Solutions collect form web for “¿Cómo puedo pasar valores entre Actividades en Android?”

Umesh muestra una buena técnica, pero creo que quieres la dirección opuesta.

Paso 1

Al iniciar la Actividad 2 y 3, use startActivityForResult . Esto le permite manejar el resultado en la actividad de llamada.

 startActivityForResult(MY_REQUEST_ID); 

Paso 2

En las actividades 2 y 3, llame a setResult(int, Intent) para devolver un valor:

 Intent resultData = new Intent(); resultData.putExtra("valueName", "valueData"); setResult(Activity.RESULT_OK, resultData); finish(); 

Paso 3

En su actividad de llamada, implemente onActivityResult y obtenga los datos:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == MY_REQUEST_ID) { if (resultCode == RESULT_OK) { String myValue = data.getStringExtra("valueName"); // use 'myValue' return value here } } } 

Editar:

Técnica # 2

Sí, también puede utilizar el estado de la aplicación global agregando una clase a la aplicación que extiende Application , vea esta respuesta de StackOverflow

Utilice el identificador de sesión en la actividad de cierre de sesión en la intención que está utilizando para iniciar la actividad:

 Intent intent = new Intent(getBaseContext(), SignoutActivity.class); intent.putExtra("EXTRA_SESSION_ID", sessionId); startActivity(intent) 

Vea este tutorial .

¿Por qué molestarse en seguir esa clase de estructura … si tres vuelven a una? Sólo envíe una intención con sus datos de tres a uno y manejarlo en consecuencia.

Enviar una Intención de la actividad 3 a 1 requeriría un cierto disparador como un botón o quizás el método del ciclo de vida de onStop para enviarlo. Es mejor que el resultado se envíe automáticamente con el método setResult.

También hay otra técnica, puede llamar a startActivity(new Intent(getApplicationContext(),Activity1.class)) junto con la clase Bundle para transferir datos de activity3 a activity1.

En Android es posible lanzar otra aplicación de un nombre de paquete especificado, pasando un argumento a él.

 public static void launchApp(Context context, String packageName) { Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName); if(intent == null) { intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Intent.EXTRA_TEXT, "*argument to send*"); context.startActivity(intent); } 

El código siguiente se puede utilizar para recuperar el argumento en la aplicación de destino.

 public static String getArgument(Activity activity) { return activity.getIntent().getStringExtra(Intent.EXTRA_TEXT); } 

Sólo se necesita una referencia a Actividad, esto es útil en Unity donde es desordenado subclase Actividad.

  • ¿Cómo puedo ejecutar mi código después de Actividad se hace visible?
  • Intento de volver a abrir un objeto ya cerrado: java.lang.IllegalStateException :?
  • Singleton se destruye
  • NavUtils.shouldUpRecreateTask falla en JellyBean
  • Android: inicia varias actividades
  • ¿Cómo pasar datos entre actividades usando variables estáticas en una clase pública?
  • ¿Por qué se llama onStop justo después de que se inicie mi actividad?
  • No se encontró actividad de Lanzador, a pesar de haber sido declarada en manifest.xml
  • Comprensión onTrimMemory (nivel int)
  • No guarde actividades - ¿Para qué sirve?
  • ¿Cómo hacer zoomview scrollview?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.