¿Cómo pasar datos de la 2a actividad a la 1a actividad cuando se presiona hacia atrás? - android
Tengo 2 actividades, Actividad1y Actividad2.
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{[4] {} en[3]}Activity2 en el TextView{[4] {} en[3]}Activity1 cuando se pulsa de Activity2.
¿Puede alguien ayudarme con el código para hacer esto trabajo?
9 answers
Iniciar Actividad2 con startActivityForResult
y utilice el método setResult
para enviar datos de vuelta de Activity2 a Activity1. En Activity1 tendrá que anular onActivityResult
para actualizar TextView
con EditText
datos de Activity2.
Por ejemplo:
En Actividad1 , comience la Actividad2 como:
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
En Actividad2 , use setResult
para enviar datos:
Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);
finish();
Y en Actividad1 , 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 Preferencias compartidas para compartir datos entre Actividades.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 19:33:41
Activity1 debe de comenzar Activity2 con startActivityForResult()
.
Activity2 debe usar setResult()
para enviar datos a Activity1.
En Actividad2 ,
@Override
public void onBackPressed() {
String data = mEditText.getText();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(resultcode, intent);
}
En Actividad1 ,
onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String myStr=data.getStringExtra("MyData");
mTextView.setText(myStr);
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-07 07:20:23
Otras respuestas no funcionaban cuando puse setResult
en onBackPressed
. Comentar la llamada a super onBackPressed
y llamar 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;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-05 03:19:54
Tome Esto como una alternativa a startActivityForResult.Pero tenga en cuenta que para tales casos este enfoque puede ser costoso en términos de rendimiento, pero en algunos casos es posible que necesite usar.
En Actividad2,
@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}
En Actividad1,
@Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String dataFromOtherAct= sp.getString("email", "no email");
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-26 15:03:25
Lea esto:
- Devolver resultado a onActivityResult()
- Obtener el resultado de una actividad llamada-Tutorial de Android para principiantes
Estos artículos te ayudarán a entender cómo pasar datos entre dos actividades en Android.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-07 10:34:09
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ás comenzando tu Actividad2.class usando startActivityForResult(mRequestCode, Activity2.clase);
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 termines con tu segunda Actividad, entonces llamas al método setResult (), desde onBackPress() o desde cualquier botón, haz clic cuando tu Activity2 destruya entonces el método call back de tu Activity1 onActivityResult () {[6] } llamará desde allí puedes obtener tus datos de intent..
Espero que te ayude...:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-12 10:50:23
Desde tu FirstActivity llama a la SecondActivity usando el método startActivityForResult ().
Por ejemplo:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);
En su SecondActivity establezca los datos que desea devolver a FirstActivity. Si no quieres regresar, no establezcas ninguna.
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 onActivityResult() método.
@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
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-26 11:16:27
TL; DR Use Activity.startActivityForResult
Respuesta Larga:
Debes comenzar leyendo la documentación para desarrolladores de Android. Específicamente el tema de su pregunta está cubierto en el Starting Activities and Getting Results
sección de la documentación Activity
.
Como por ejemplo el código, el SDK de Android proporciona buenos ejemplos. Además, otras respuestas aquí le dan fragmentos cortos de código de ejemplo para usar.
Sin embargo, si está buscando alternativas, lea esta pregunta. Esto es una buena discusión sobre cómo usar startActivityForResults
con fragmentos, así como un par de otros enfoques para pasar datos entre actividades.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:47
Y tengo un problema que quería hacer este tipo de envío de datos en un Botón Suave que había hecho y la Tecla de software que es el valor predeterminado en todos los dispositivos Android, así que he hecho esto, primero he hecho un Intent
en mi" Activity
:
Intent intent = new Intent();
intent.setClass(context, _AddNewEmployee.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, 6969);
setResult(60);
Entonces en mi segunda Actividad, he declarado un Campo en mi "B" Activity
:
private static int resultCode = 40;
Luego, después de realizar mi solicitud con éxito o cada vez que quisiera decirle a la Actividad "A" que este trabajo se ha realizado correctamente, cambie el valor de resultCode a lo mismo he dicho en" A "Activity
que en mi caso es " 60 " y luego:
private void backToSearchActivityAndRequest() {
Intent data = new Intent();
data.putExtra("PhoneNumber", employeePhoneNumber);
setResult(resultCode, data);
finish();
}
@Override
public void onBackPressed() {
backToSearchActivityAndRequest();
}
PD: Recuerde eliminar el Super
del método onBackPressed si desea que esto funcione correctamente.
Entonces debería llamar al Método onActivityResult
en mi Actividad "A"también:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 6969 && resultCode == 60) {
if (data != null) {
user_mobile = data.getStringExtra("PhoneNumber");
numberTextField.setText(user_mobile);
getEmployeeByNumber();
}
}
}
Eso es todo, espero que te ayude. # HappyCoding;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-16 10:35:23