{"id":1548,"date":"2018-09-19T13:54:58","date_gmt":"2018-09-19T18:54:58","guid":{"rendered":"http:\/\/naps.com.mx\/blog\/?p=1548"},"modified":"2018-09-20T08:55:48","modified_gmt":"2018-09-20T13:55:48","slug":"abrir-un-activity-en-android-pasando-datos","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/abrir-un-activity-en-android-pasando-datos\/","title":{"rendered":"Abrir un Activity en Android pasando datos"},"content":{"rendered":"<p><em><strong>Veamos c\u00f3mo abrir un Activity en Android y c\u00f3mo pasar un dato de tipo String reutilizandolo en su interfaz de usuario.<\/strong><\/em><\/p>\n<p><!--more--><\/p>\n<h2>Intents en Android<\/h2>\n<p>Una forma de abrir un activity en Android es realizando un Intent. De acuerdo con<a href=\"https:\/\/developer.android.com\/guide\/components\/intents-filters?hl=es-419\"> la documentaci\u00f3n de Android<\/a>, un Intent en Android es un objeto que se utiliza para solicitar una acci\u00f3n de otro componente de la aplicaci\u00f3n. Existen Intents para <strong>comenzar un actividad<\/strong> (un Activity representa una \u00fanica pantalla en una aplicaci\u00f3n), para <strong>iniciar un servicio<\/strong> (un Service es un componente que realiza operaciones en segundo plano), y para <strong>entregar un mensaje<\/strong> (un mensaje es un aviso que cualquier aplicaci\u00f3n puede recibir).<\/p>\n<p>Existen dos tipos de Intents: expl\u00edcitos e impl\u00edcitos.<\/p>\n<h2>Intent expl\u00edcito con datos<\/h2>\n<p>Un Intent expl\u00edcito especifica qu\u00e9 componente debe iniciar usando su nombre de clase.<\/p>\n<p>Veamos c\u00f3mo abrir un segundo Activity y c\u00f3mo pasarle un dato a este segundo Activity.<\/p>\n<h2>Abrir un Activity en Android pasando datos<\/h2>\n<p>Para este ejercicio deber\u00e1 tener dos Activity: <em>MainActivity.java<\/em> y <em>SecondActivity.java<\/em>.<\/p>\n<p>Tenemos el siguiente bot\u00f3n en<span class=\"Apple-converted-space\">\u00a0 <\/span>activity_main.xml<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;Button\r\n \u00a0 \u00a0 android:id=\"@+id\/buttonMain\"\r\n\u00a0\u00a0 \u00a0 android:layout_width=\"match_parent\"\r\n\u00a0\u00a0 \u00a0 android:layout_height=\"wrap_content\"\r\n\u00a0\u00a0 \u00a0 android:text=\"Go Next\"\r\n\u00a0\u00a0 \u00a0 android:textColor=\"#fff\"\r\n\u00a0\u00a0 \u00a0 android:background=\"#e91e63\"\r\n\u00a0\u00a0 \u00a0 tools:layout_editor_absoluteX=\"0dp\"\r\n\u00a0\u00a0 \u00a0 tools:layout_editor_absoluteY=\"447dp\"\r\n\u00a0\u00a0 \u00a0 android:layout_alignParentBottom= \"true\"\r\n\u00a0\/&gt;\r\n<\/pre>\n<p>Observe que su id es <em>buttonMain<\/em>, su texto es Go Next, el color del texto es blanco y el color de fondo es rosa.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Y tenemos el siguiente TextView en activity_second.xml<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;TextView\r\n\u00a0 \u00a0 \u00a0 android:id=\"@+id\/textViewMain\"\r\n\u00a0 \u00a0 \u00a0 android:layout_width=\"wrap_content\"\r\n\u00a0 \u00a0 \u00a0 android:layout_height=\"wrap_content\"\r\n\u00a0 \u00a0 \u00a0 android:text=\"\"\r\n\u00a0 \u00a0 \u00a0 tools:layout_editor_absoluteX=\"130dp\"\r\n\u00a0 \u00a0 \u00a0 tools:layout_editor_absoluteY=\"228dp\" \/&gt;\r\n<\/pre>\n<p>Observe que su id es <em>textViewMain<\/em> y no contiene ning\u00fan texto.<\/p>\n<p>Entonces en nuestro Mainactivity.java realizaremos lo siguiente:<\/p>\n<ol>\n<li>Implementar View.OnClickListener<\/li>\n<li>Detectar cu\u00e1ndo fue pulsado el bot\u00f3n<\/li>\n<li>Declarar una variable String<\/li>\n<li>Si el bot\u00f3n es pulsado abrir SecondActivity, enviando el dato String.<\/li>\n<\/ol>\n<p>En nuestro SecondActivity.java realizaremos lo siguiente:<\/p>\n<p>5. Recibir el dato String<\/p>\n<p>6. Mostrarlo en un TextView<\/p>\n<p>&nbsp;<\/p>\n<p>El c\u00f3digo de mi MainActivity.java queda de esta manera:<\/p>\n<p>Lo que hicimos fue lo siguiente:<\/p>\n<ol>\n<li>Implementar View.OnClickListener<\/li>\n<\/ol>\n<p>Lo hacemos cuando escribimos implements View.OnClickListener<\/p>\n<ol start=\"2\">\n<li>Detectar cu\u00e1ndo fue pulsado el bot\u00f3n. Lo realiza la siguiente parte del c\u00f3digo:<\/li>\n<\/ol>\n<p><em>btn = (Button) findViewById(R.id.buttonMain);<\/em><\/p>\n<p><em>btn.setOnClickListener(this);<\/em><\/p>\n<ol start=\"3\">\n<li>Declarar una variable String<\/li>\n<\/ol>\n<p><em>private final String MSNG = \u00abHola desde aqui\u00bb;<\/em><\/p>\n<ol start=\"4\">\n<li>Si el bot\u00f3n es pulsado abrir SecondActivity, enviando el dato String.<\/li>\n<\/ol>\n<p><em><span class=\"Apple-converted-space\">\u00a0 <\/span>@Override<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>public void onClick(View view){<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>Intent intent = new Intent(MainActivity.this, SecondActivity.class);<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>intent.putExtra(\u00abmsng\u00bb, MSNG);<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>startActivity(intent);<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>}<\/em><\/p>\n<p>Notamos que es un Intent expl\u00edcito pues especificamos abiertamente qui\u00e9n es el elemento que env\u00eda y qui\u00e9n es le que recibe. La variable String MSNG la enviamos usando la funci\u00f3n putExtra.<\/p>\n<p>El c\u00f3digo de mi SecondActivity.java queda as\u00ed:<\/p>\n<pre class=\"lang:java decode:true\">package com.example.gibgarcia.practica4;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.widget.TextView;\r\nimport android.widget.Toast;\r\n\r\npublic class SecondActivity extends AppCompatActivity {\r\n\u00a0 \u00a0 private TextView textview;\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 protected void onCreate(Bundle savedInstanceState) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 super.onCreate(savedInstanceState);\r\n\u00a0 \u00a0 \u00a0 \u00a0 setContentView(R.layout.activity_second);\r\n\u00a0 \u00a0 \u00a0 \u00a0 textview = (TextView) findViewById(R.id.textViewMain);\r\n\u00a0 \u00a0 \u00a0 \u00a0 Bundle bundle = getIntent().getExtras();\r\n\u00a0 \u00a0 \u00a0 \u00a0 if (bundle != null){\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 String msng = bundle.getString(\"msng\");\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 textview.setText(msng);\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 else{\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Toast.makeText(SecondActivity.this, \"Esta vacio\", Toast.LENGTH_LONG).show();\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 }\r\n}\r\n<\/pre>\n<p>Lo que hicimos fue lo siguiente:<\/p>\n<p>5. Recibir el dato String<\/p>\n<p>6. Mostrarlo en un TextView<\/p>\n<p><em>Bundle bundle = getIntent().getExtras();<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>if (bundle != null){<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>String msng = bundle.getString(\u00abmsng\u00bb);<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>textview.setText(msng);<\/em><\/p>\n<p><em><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>}<\/em><\/p>\n<p>Utilizamos un objeto Bundle para obtener los datos enviados, lo extraemos y lo mostramos en un TextView<\/p>\n<p>En caso de que no estuviesemos recibiendo datos, mostrar\u00e1 un mensaje indicando que \u201cEst\u00e1 vac\u00edo\u201d.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>El resultado es el siguiente:<\/p>\n<div id=\"attachment_1552\" style=\"width: 230px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/09\/intentexplicito.gif\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1552\" class=\"size-full wp-image-1552\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/09\/intentexplicito.gif\" alt=\"Abrir un Activity en Android\" width=\"220\" height=\"364\" \/><\/a><p id=\"caption-attachment-1552\" class=\"wp-caption-text\">Abrir un Activity en Android<\/p><\/div>\n<h3>Referencias<\/h3>\n<ol>\n<li>Android.com (2018). <a href=\"https:\/\/developer.android.com\/guide\/components\/intents-filters?hl=es-419\"><strong>Intents y filtros de intents<\/strong><\/a>. Disponible en [https:\/\/developer.android.com\/guide\/components\/intents-filters?hl=es-419]<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Veamos c\u00f3mo abrir un Activity en Android y c\u00f3mo pasar un dato de tipo String reutilizandolo en su interfaz de usuario.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[234],"tags":[198,235,237],"class_list":["post-1548","post","type-post","status-publish","format-standard","hentry","category-aplicaciones-moviles","tag-android","tag-desarrollo-de-aplicaciones-moviles","tag-intents"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=1548"}],"version-history":[{"count":5,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1548\/revisions"}],"predecessor-version":[{"id":1565,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1548\/revisions\/1565"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=1548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=1548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=1548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}