{"id":735,"date":"2013-05-29T11:38:09","date_gmt":"2013-05-29T17:38:09","guid":{"rendered":"http:\/\/www.lastdragon.net\/?p=735"},"modified":"2013-05-29T11:38:09","modified_gmt":"2013-05-29T17:38:09","slug":"evento-de-click-onclick-en-botones-de-android","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=735","title":{"rendered":"Evento de Click ( onClick ) en botones de Android"},"content":{"rendered":"<p>En mis esfuerzos de evangelizaci\u00f3n por la programaci\u00f3n en Android he encontrado que algunas personas tienen problemas con cosas como el Evento de Click muy b\u00e1sico para cualquier bot\u00f3n en cualquier GUI. Esto es por que se confunden ya que al googlear aparecen al menos 2 formas de hacer lo mismo.<\/p>\n<p>Estas formas de hacer lo mismo dependen de lo que quiere hacer el programador.<\/p>\n<p>En mi caso muy particular a mi me gusta controlar todo lo m\u00e1s posible, excepciones, eventos, etc. Por lo que yo trato siempre de programar todo en c\u00f3digo, por todo me refiero a lo ejecutable. Algunas reglas de negocios simplemente nunca se deben programar como hardcode; por lo tanto yo uso 2 formas para manejar eventos de Click la completa en donde hago las implementaciones y las herencias necesarias o la r\u00e1pida donde simplemente cre\u00f3 un m\u00e9todo r\u00e1pido y le digo al bot\u00f3n creado desde la actividad que maneje el evento de click. Esto \u00faltimo se hace con menos c\u00f3digo y mucho m\u00e1s r\u00e1pido pero no debe usarse en producci\u00f3n, el c\u00f3digo queda menos legible <\/p>\n<p>El c\u00f3digo completo manejado desde JAVA<\/p>\n<blockquote><p>import android.os.Bundle;<br \/>\nimport android.view.View;<br \/>\nimport android.view.View.OnClickListener;<br \/>\nimport android.widget.Button;<br \/>\nimport android.widget.TextView;<br \/>\nimport android.app.Activity;<\/p>\n<p>public class MainActivity extends Activity implements&nbsp;<br \/>\nOnClickListener {<\/p>\n<p>&nbsp;&nbsp;&nbsp; @Override<br \/>\n&nbsp;&nbsp;&nbsp; protected void onCreate(Bundle savedInstanceState) {<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br \/>\nsuper.onCreate(savedInstanceState);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br \/>\nsetContentView(R.layout.activity_main);<br \/>\n&nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; Button boton = (Button) findViewById(R.id.button1);<br \/>\n&nbsp;&nbsp;&nbsp; boton.setOnClickListener(this);<br \/>\n&nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; Button boton2 = (Button) findViewById(R.id.button2);<br \/>\n&nbsp;&nbsp;&nbsp; boton2.setOnClickListener(this);<br \/>\n&nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; Button boton3 = (Button) findViewById(R.id.button3);<br \/>\n&nbsp;&nbsp;&nbsp; boton3.setOnClickListener(this);<br \/>\n&nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; @Override<br \/>\n&nbsp;&nbsp;&nbsp; public void onClick (View v)<br \/>\n&nbsp;&nbsp;&nbsp; {<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/\/ El boton uno cambiara su<br \/>\netiqueta sin importar que boton se le de click <br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Button boton = (Button)<br \/>\nfindViewById(R.id.button1);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; boton.setText(&#8220;Click a un boton<br \/>\nsin controlar la fuente del click&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/\/ Para tener control se<br \/>\ncondiciona la identificacion del boton al que se le dio click<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \/\/ de estaforma solo se ejecuta<br \/>\nel codigo correspondiente a ese boton<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (v.getId() == R.id.button2) {<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br \/>\n((TextView)v).setText(&#8220;Evento onClick controlado del boton 2&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (v.getId() == R.id.button3) {<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br \/>\n((TextView)v).setText(&#8220;Evento onClick controlado del boton 3&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; <\/p>\n<p>}<\/p><\/blockquote>\n<p>El c\u00f3digo donde el evento lo maneja la actividad y se declara en el XML de la misma<\/p>\n<p>Parte Java<\/p>\n<blockquote><p>\nimport android.os.Bundle;<br \/>\nimport android.view.View;<br \/>\nimport android.widget.Button;<br \/>\nimport android.app.Activity;<\/p>\n<p>public class MainActivity extends Activity&nbsp; {<\/p>\n<p>&nbsp;&nbsp;&nbsp; @Override<br \/>\n&nbsp;&nbsp;&nbsp; protected void onCreate(Bundle savedInstanceState) {<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br \/>\nsuper.onCreate(savedInstanceState);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br \/>\nsetContentView(R.layout.activity_main);<br \/>\n&nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; <br \/>\n&nbsp;&nbsp;&nbsp; }<br \/>\n&nbsp;&nbsp;&nbsp; <\/p>\n<p>&nbsp;&nbsp;&nbsp; public void clickBoton1 (View v) {<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Button boton = (Button)<br \/>\nfindViewById(R.id.button1);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; boton.setText(&#8220;Evento Click<br \/>\ncontrolado por la Actividad, Boton 1&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; public void clickBoton2 (View v) {<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Button boton = (Button)<br \/>\nfindViewById(R.id.button2);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; boton.setText(&#8220;Evento Click<br \/>\ncontrolado por la Actividad, Boton 2&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp; public void clickBoton3 (View v) {<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Button boton = (Button)<br \/>\nfindViewById(R.id.button3);<br \/>\n&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; boton.setText(&#8220;Evento Click<br \/>\ncontrolado por la Actividad, Boton 3&#8221;);<br \/>\n&nbsp;&nbsp;&nbsp; }<\/p>\n<p>}<\/p>\n<\/blockquote>\n<p>Parte XML<\/p>\n<blockquote><p>&nbsp;&nbsp;&nbsp; &lt;Button<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:id=&#8221;@+id\/button1&#8243;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nandroid:layout_width=&#8221;wrap_content&#8221;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nandroid:layout_height=&#8221;wrap_content&#8221;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nandroid:layout_alignParentLeft=&#8221;true&#8221;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nandroid:layout_alignParentRight=&#8221;true&#8221;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nandroid:layout_alignParentTop=&#8221;true&#8221;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/>\nandroid:layout_marginTop=&#8221;81dp&#8221;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:onClick=&#8221;clickBoton1&#8243;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; android:text=&#8221;Dame Click aka<br \/>\nTAP&#8221; \/&gt;<\/p>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/clickandroid.jpg\" alt=\"onClick Android\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En mis esfuerzos de evangelizaci\u00f3n por la programaci\u00f3n en Android he encontrado que algunas personas tienen problemas con cosas como el Evento de Click muy b\u00e1sico para cualquier bot\u00f3n en cualquier GUI. Esto es por que se confunden ya que al googlear aparecen al menos 2 formas de hacer lo mismo. Estas formas de hacer&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-735","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=735"}],"version-history":[{"count":0,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/735\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}