una terminar studio retornar regresar navegar navegacion entre destruir desde comunicar como boton anterior activity actividades abrir android android-activity parent-child pass-data

terminar - retornar activity android



¿Cómo pasar datos de la 2ª actividad a la 1ª actividad cuando se presiona hacia atrás?-Android (8)

Tengo 2 actividades, Activity1 y Activity2 .

En Activity1 tengo un botón y TextView . Cuando se hace clic en el botón, se inicia Activity2 .

En Activity2 tengo un EditText .

Quiero mostrar los datos recuperados de EditText en Activity2 en TextView en Activity1 cuando se presiona atrás desde Activity2 .

¿alguien me puede ayudar con el código para que esto funcione?


Desde su FirstActivity llame a SecondActivity utilizando el método startActivityForResult ().

Por ejemplo:

Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1);

En su SecondActivity configure los datos que desea devolver a FirstActivity. Si no desea regresar, no configure ninguno.

Por ejemplo: en secondActivity si desea enviar datos de vuelta:

Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(Activity.RESULT_OK,returnIntent); finish();

Si no desea devolver datos:

Intent returnIntent = new Intent(); setResult(Activity.RESULT_CANCELED, returnIntent); finish();

Ahora, en su clase FirstActivity, escriba el siguiente código para el método onActivityResult ().

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == Activity.RESULT_OK){ String result=data.getStringExtra("result"); } if (resultCode == Activity.RESULT_CANCELED) { //Write your code if there''s no result } } }


Inicie Activity2 con startActivityForResult y use el método setResult para enviar datos de Activity2 a Activity1. En Activity1 necesitarás anular onActivityResult para actualizar TextView con datos de EditText desde Activity2.

Por ejemplo:

En Activity1 , inicie Activity2 como:

Intent i = new Intent(this, Activity2.class); startActivityForResult(i, 1);

En Activity2 , use setResult para enviar datos de vuelta:

Intent intent = new Intent(); intent.putExtra("editTextValue", "value_here") setResult(RESULT_OK, intent); finish();

Y en Activity1 , recibe datos con onActivityResult :

public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { if(resultCode == RESULT_OK) { String strEditText = data.getStringExtra("editTextValue"); } } }

Si puede, también use SharedPreferences para compartir datos entre Actividades.



Otras respuestas no funcionaban cuando puse setResult onBackPressed . Comentando la llamada a super onBackPressed y llamando a finish manualmente resuelve el problema:

@Override public void onBackPressed() { //super.onBackPressed(); Intent i = new Intent(); i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded); setResult(RESULT_OK, i); finish(); }

Y en la primera actividad:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == QUEUE_MSG) { if (resultCode == RESULT_OK) { Serializable tmp = data.getSerializableExtra(MainActivity.EXTRA_NON_DOWNLOADED_PAGES); if (tmp != null) serializable = tmp; } } }


TL; DR Use startActivityForResult

Respuesta larga:

Deberías comenzar leyendo la documentación del desarrollador de Android. Específicamente, el tema de su pregunta se trata en la sección Starting Activities and Getting Results de la documentación de la Activity .

En cuanto al código de ejemplo, el SDK de Android proporciona buenos ejemplos. Además, otras respuestas aquí le dan fragmentos cortos de código de muestra para usar.

Sin embargo, si está buscando alternativas, lea esta pregunta ASÍ . Esta es una buena discusión sobre cómo usar startActivityForResults con fragmentos, así como sobre otros enfoques para pasar datos entre actividades.


Tome esto como una alternativa para comenzar la actividad para la recuperación. Sin embargo, tenga en cuenta que, en tales casos, este enfoque puede ser costoso en términos de rendimiento, pero en algunos casos es posible que deba utilizarlo.

En Activity2,

@Override public void onBackPressed() { String data = mEditText.getText(); SharedPreferences sp = getSharedPreferences("LoginInfos", 0); Editor editor = sp.edit(); editor.putString("email",data); editor.commit(); }

En Activity1,

@Override public void onResume() { SharedPreferences sp = getSharedPreferences("LoginInfos", 0); String dataFromOtherAct= sp.getString("email", "no email"); }


esta es tu primera actividad1.

public class Activity1 extends Activity{ private int mRequestCode = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, Activity2.class); startActivityForResult(intent, mRequestCode); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == mRequestCode && resultCode == RESULT_OK){ String editTextString = data.getStringExtra("editText"); } } }

Desde aquí, está comenzando su Activity2.class usando startActivityForResult (mRequestCode, Activity2.class);

Ahora esta es tu segunda actividad, el nombre es Activity2

public class Activity2 extends Activity { private EditText mEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //mEditText = (EditText)findViewById(R.id.edit_text); Intent intent = new Intent(); intent.putExtra("editText", mEditText.getText().toString()); setResult(RESULT_OK, intent); } }

Ahora cuando termine con su segunda actividad, llame al método setResult (), desde onBackPress () o desde cualquier botón, haga clic en cuando Activity2 se destruirá y luego el método de devolución de actividad de Activity1 enActivityResult () llamará desde allí para obtener sus datos de la intención ..

Espero que te ayude ... :)


Activity1 debería iniciar Activity2 con startActivityForResult() .

Activity2 debería usar setResult() para enviar datos de vuelta a Activity1 .

En Activity2 ,

@Override public void onBackPressed() { String data = mEditText.getText(); Intent intent = new Intent(); intent.putExtra("MyData", data); setResult(resultcode, intent); }

En Activity1 ,

onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK) { String myStr=data.getStringExtra("MyData"); mTextView.setText(myStr); } } }