sábado, 7 de noviembre de 2015

Enviar datos entre actividades en Android Studio

   

Pasar parámetros entre activities a través de los Intents explícitos


¿Que es un Intent en android?

Un Intent se define genéricamente como una "intención" de hacer algo de trabajo. Los Intents encapsulan varios conceptos
Pueden usar los intentos para invocar a otras aplicaciones desde la aplicación. Puede usar los Intent para invocar los componentes internos o externos de su aplicación.

Enviar datos entre actividades en Android Studio

¿Para que es un intent explicito?

Intentos explícitos se utilizan para llamar a un componente específico. Cuando usted sabe qué componente desea iniciar y usted no quiere dar el control libre al usuario sobre qué componente debe usar. Por ejemplo, usted tiene una aplicación que tiene 2 actividades. Activity A y la Activity B. Usted quiere iniciar la actividad B desde la actividad A. En este caso, se define una intención explícita.

Pasos para enviar los datos hacia otros activities:

1- Por ejemplo tenemos datos en la actividad MainActivity y queremos enviar estos datos a otro activity que tiene un nombre VentanaA_Activity.

Vamos a crear la actividad VentanaA_Activity:
Creamos un Blank Activity, para que nos cree la clase .java y su respectivo layout .xml. Según el nombre que le han puesto debe haberles creado los archivos por ejemplo: VentanaA_Activity.java y activity_ventana_a_.xml respectivamente.


Nota: Si usted a creado su archivo java y su archivo xml, sin usar la forma de creación del  Blank Activity que nos brinda android studio. Si usted a decidido crear su clase java y después su archivo xml uno por uno. Tendremos que listar la actividad en el AndroidManifest.xml

AndroidManifest.xml:
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <!--Para que se pueda abrir la actividad VentanaA_Activity-->
        <activity
            android:name=".VentanaA_Activity"
            android:label="@string/title_activity_ventana_a_" >
        </activity>

    </application>

Diseñemos los layout archivos  .xml.

 activity_main.xml:


activity_ventana_a_.xml:




Código del archivo activity_main.xml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Nombre:"
        android:id="@+id/eti_Nombre" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edi_nombre" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Telefono:"
        android:id="@+id/eti_Telefono" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edi_telefono" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Enviar"
        android:id="@+id/btnEnviar" />


</LinearLayout>





Código del archivo activity_ventana_a_.xml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".VentanaA_Activity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/eti_nombreA"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/eti_telefonoA"/>

</LinearLayout>




Y por ultimo como siempre lo mas interesante la programación de las Actividades, el código esta comentado para que sea fácil de entender:

El código del MainActivity:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btnEnviar;
    private EditText ediNombre,ediTelefono;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnEnviar=(Button)findViewById(R.id.btnEnviar);
        ediNombre = (EditText) findViewById( R.id.edi_nombre );
        ediTelefono = (EditText) findViewById( R.id.edi_telefono );

        btnEnviar.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {

        Intent explicit_intent;//Declaro el Intent

        //Instanciamos el Intent dandole:
        // el contexto y la clase a la cual nos deseamos dirigir
        explicit_intent = new Intent(this,VentanaA_Activity.class);
        String auxEdiNombre=ediNombre.getText().toString();
        String auxEdiTelefono=ediTelefono.getText().toString();

        explicit_intent.putExtra("nombre",auxEdiNombre);//Guardamos una cadena
        explicit_intent.putExtra("telefono",auxEdiTelefono);//Guardamos un entero

        //lo iniciamos pasandole la intencion, con todos sus parametros guardados
        startActivity(explicit_intent);
    }
}




El código del VentanaA_Activity:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class VentanaA_Activity extends AppCompatActivity {

    TextView etiNombre,etiTelefono;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ventana_a_);
        etiNombre = (TextView) findViewById( R.id.eti_nombreA );
        etiTelefono = (TextView) findViewById( R.id.eti_telefonoA );

        Intent intent=getIntent();
        Bundle extras =intent.getExtras();
        if (extras != null) {//ver si contiene datos
            String datoNombre=(String)extras.get("nombre");//Obtengo el nombre
            String datoTelefono= (String) extras.get("telefono");//Obtengo la edad
           
            etiNombre.setText(datoNombre);
            etiTelefono.setText(datoTelefono);
        }
    }
}

Y al ejecutar debe funcionar correctamente:

Enviar datos entre actividades en Android Studio


Cesar GI

About Cesar GI

Lo que me importa es poder enseñar lo poco que se, por que asi como yo aprendo leyendo gracias a las personas que comparten sus conocimiento yo tambien quiero ayudar a la comunidad en español aportando lo poco que he aprendido hasta el momento.

12 comentarios

Write comentarios
Laura Sanchez
AUTHOR
27 de enero de 2016, 4:25 delete

Hola,me ha encantado tu tutorial.
Pero en el caso de querer pasar la misma foto de una actividad a otra,como pondría el bundle?Me podrías ayudar?

Reply
avatar
Cesar GI
AUTHOR
27 de enero de 2016, 10:42 delete Este comentario ha sido eliminado por el autor.
avatar
Cesar GI
AUTHOR
27 de enero de 2016, 10:42 delete

Quizas analizando el código de este tuturial te sirva http://www.codigojavalibre.com/2015/10/crear-un-listview-con-imagenes-en-Android-Studio.html

Reply
avatar
Hericlark
AUTHOR
10 de septiembre de 2016, 21:34 delete

Hola y si quiero hacer lo contrario, osea pasar datos del activity2 al activity1 sin tener que abrir el activity2 pues este ya tiene el dato ahi guardado y predefinido desde el principio ??????

Reply
avatar
Hericlark
AUTHOR
10 de septiembre de 2016, 21:34 delete

Hola y si quiero hacer lo contrario, osea pasar datos del activity2 al activity1 sin tener que abrir el activity2 pues este ya tiene el dato ahi guardado y predefinido desde el principio ??????

Reply
avatar
Hericlark
AUTHOR
10 de septiembre de 2016, 21:35 delete

Hola y si quiero hacer lo contrario, osea pasar datos del activity2 al activity1 sin tener que abrir el activity2 pues este ya tiene el dato ahi guardado y predefinido desde el principio ??????

Reply
avatar
Unknown
AUTHOR
1 de octubre de 2016, 19:12 delete

Brother, a mí se me cierra la aplicación cuando doy el botón envíar, tendrás idea de por qué?

Reply
avatar
Unknown
AUTHOR
3 de noviembre de 2016, 10:09 delete

Hola que tal felicitaciones por el tuto.... una pregunta si deseo enviar informacion masiva y deeseo trabajar en la actividad pero no quiero que cada vez que envio la info a la actividad se inicie de nuevo por que la app se esta cerrando. que podria realizar... te agradezco men..

Reply
avatar
Unknown
AUTHOR
3 de noviembre de 2016, 10:09 delete

Hola que tal felicitaciones por el tuto.... una pregunta si deseo enviar informacion masiva y deeseo trabajar en la actividad pero no quiero que cada vez que envio la info a la actividad se inicie de nuevo por que la app se esta cerrando. que podria realizar... te agradezco men..

Reply
avatar
Santiago
AUTHOR
18 de noviembre de 2016, 17:45 delete

hola cesar, estoy programando hace unos meses, y ahora estoy atascado en un problema, realice un recyclerview mostrando un listado... tengo cada item del listado inflado dentro de cardviews, estoy tratando de que una accion en cualuqier item de la cardview me modifique un toolbar inflado en la actividad contenedora, como veras, el problema es que los eventos asociados a la cardview se deben declarar dentro de la clase del recycler que obviamente no hereda de appcompact y por lo tanto no puede acceder al menu principal, yo no se si hay una manera de comunicacion asincronica entre una actividad padre e hija, quiero decir que yo pueda enviar un mensaje a la inversa, por ejemplo, hice click en una cardview y que la activity contenedora pueda leer un parametro para modificar el menu, espero haber sido claro, si me tiras una idea aunque sea estaria contento

Reply
avatar
zamorano
AUTHOR
16 de septiembre de 2017, 16:19 delete

Cuando se trata de un entero ? que se pasa como parametro

Reply
avatar
Unknown
AUTHOR
6 de octubre de 2017, 9:54 delete

puede que no estes pasando los parametros al onclick,

Reply
avatar