¿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 Activity1Tengo un botón y TextView. Cuando se hace clic en el botón se inicia Activity2.

En Activity2tengo 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?

Author: ישו אוהב אותך, 2013-01-12

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.

 243
Author: ρяσѕρєя K,
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);
        }
    }
}
 17
Author: Swayam,
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;
        }
    }
}
 9
Author: FindOut_Quran,
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");
} 
 4
Author: katmanco,
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:

  1. Devolver resultado a onActivityResult()
  2. 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.

 2
Author: Dixit Patel,
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...:)

 1
Author: vishesh chandra,
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
        }
    }
}
 1
Author: Manoj Reddy,
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.

 0
Author: Franci Penov,
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;

 0
Author: Arash Afshar,
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