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 conceptosPueden 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.
¿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>
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:
12 comentarios
Write comentariosHola,me ha encantado tu tutorial.
ReplyPero en el caso de querer pasar la misma foto de una actividad a otra,como pondría el bundle?Me podrías ayudar?
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
ReplyHola 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 ??????
ReplyHola 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 ??????
ReplyHola 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 ??????
ReplyBrother, a mí se me cierra la aplicación cuando doy el botón envíar, tendrás idea de por qué?
ReplyHola 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..
ReplyHola 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..
Replyhola 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
ReplyCuando se trata de un entero ? que se pasa como parametro
Replypuede que no estes pasando los parametros al onclick,
Reply