{"id":1610,"date":"2018-10-10T11:55:55","date_gmt":"2018-10-10T16:55:55","guid":{"rendered":"http:\/\/naps.com.mx\/blog\/?p=1610"},"modified":"2019-06-16T23:52:34","modified_gmt":"2019-06-17T04:52:34","slug":"uso-de-un-listview-en-android","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/uso-de-un-listview-en-android\/","title":{"rendered":"Uso de un ListView en Android para mostrar una lista de datos"},"content":{"rendered":"<p><em><strong>Un ListView en Android es un objeto que nos permite mostrar una lista de elementos desplazables.<span class=\"Apple-converted-space\">\u00a0Veamos ejemplo de c\u00f3mo construirlo paso a paso.<\/span><\/strong><\/em><\/p>\n<p><!--more--><\/p>\n<p>En el siguiente ejemplo deseamos mostrar una lista compuesta por<span class=\"Apple-converted-space\">\u00a0 <\/span>5 estados de M\u00e9xico utilizando un <em><strong>ListView<\/strong><\/em> en Android.<\/p>\n<h2><em>ListView<\/em> que muestra una lista de datos est\u00e1ticos<\/h2>\n<p><strong>Paso 1<\/strong>. Crea un proyecto nuevo.<\/p>\n<p><strong>Paso 2<\/strong>. Coloca un ListView usando la vista Dise\u00f1o.<\/p>\n<div id=\"attachment_1612\" style=\"width: 414px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/01ListView-en-Android.jpeg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1612\" class=\"size-full wp-image-1612\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/01ListView-en-Android.jpeg\" alt=\"ListView en Android\" width=\"404\" height=\"654\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/01ListView-en-Android.jpeg 404w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/01ListView-en-Android-185x300.jpeg 185w\" sizes=\"auto, (max-width: 404px) 100vw, 404px\" \/><\/a><p id=\"caption-attachment-1612\" class=\"wp-caption-text\">ListView en Android<\/p><\/div>\n<p><strong>Paso 3<\/strong>.<span class=\"Apple-converted-space\">\u00a0 <\/span>Crea las variables a utilizar<\/p>\n<p>Entre ellas, una variable de tipo <em><strong>ListView<\/strong><\/em> (en <em><strong>MainActivity<\/strong><\/em>)<\/p>\n<pre class=\"lang:java decode:true \">private ListView listview;\r\nprivate ArrayList&lt;String&gt; names;<\/pre>\n<p><strong>Paso 4<\/strong>. Enlazar<\/p>\n<p>Enlaza la variable anterior con el elemento <em><strong>ListView<\/strong><\/em> de la vista Dise\u00f1o.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<pre class=\"lang:java decode:true \">listview = (ListView) findViewById(R.id.listview);<\/pre>\n<p><strong>Paso 5<\/strong>. Coloca los datos que quieras mostrar en un Array de Strings<\/p>\n<pre class=\"lang:java decode:true \">names = new ArrayList&lt;String&gt;(); \u00a0 \u00a0 \u00a0 \u00a0 \r\nnames.add(\"Veracruz\"); \u00a0 \u00a0 \u00a0 \u00a0 \r\nnames.add(\"Tabasco\"); \u00a0 \u00a0 \u00a0 \u00a0 \r\nnames.add(\"Chiapas\"); \u00a0 \u00a0 \u00a0 \u00a0 \r\nnames.add(\"Campeche\"); \u00a0 \u00a0 \u00a0 \u00a0 \r\nnames.add(\"Quintana Roo\u201d);<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Paso 6<\/strong>. Crea un adaptador y agr\u00e9gale la variable de Strings.<\/p>\n<pre class=\"lang:java decode:true \">ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_list_item_1, names);\r\n<\/pre>\n<p><strong>Paso 7<\/strong>. Indica que el listview utilizar\u00e1 ese adaptador.<\/p>\n<pre class=\"lang:java decode:true \">listview.setAdapter(adapter);<\/pre>\n<p>El resultado hasta aqu\u00ed es el siguiente:<\/p>\n<div id=\"attachment_1615\" style=\"width: 558px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/02LisView-en-Android.jpeg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1615\" class=\"size-full wp-image-1615\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/02LisView-en-Android.jpeg\" alt=\"ListView en Android\" width=\"548\" height=\"980\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/02LisView-en-Android.jpeg 548w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/02LisView-en-Android-168x300.jpeg 168w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/a><p id=\"caption-attachment-1615\" class=\"wp-caption-text\">ListView en Android<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Agregar un evento <em>Click<\/em> a un <em>ListView<\/em> en Android<\/h2>\n<p><strong>Paso 1<\/strong>. Creamos un evento ClickListener.<\/p>\n<p><strong>Paso 2<\/strong>. Sobreescribimos la funci\u00f3n onItemClick<\/p>\n<p>Pasamos la vista a mostrar, la posici\u00f3n del arreglo de nombres de estado. Si el usuario da clic se mostrar\u00e1 una peque\u00f1a ventana de texto mostrando el valor de esa determianda posici\u00f3n.<\/p>\n<pre class=\"lang:java decode:true\">listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public void onItemClick(AdapterView&lt;?&gt; adapterView, View view, int position, long id) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 Toast.makeText(MainActivity.this, \"Has pulsado: \"+ names.get(position), Toast.LENGTH_LONG).show();\r\n\u00a0 \u00a0 \u00a0 }\r\n \u00a0 });<\/pre>\n<p>El resultado hasta aqu\u00ed es el siguiente<\/p>\n<div id=\"attachment_1618\" style=\"width: 230px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/04Gif-ListView-en-Android.gif\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1618\" class=\"size-full wp-image-1618\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/04Gif-ListView-en-Android.gif\" alt=\"ListView en Android\" width=\"220\" height=\"364\" \/><\/a><p id=\"caption-attachment-1618\" class=\"wp-caption-text\">ListView en Android<\/p><\/div>\n<h2>Personalizar un <em>ListView<\/em> en Android<\/h2>\n<p>Vamos a Crear un Layout personalizado.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p><strong>Paso 1<\/strong>. Da clic derecho en <strong><em>layout<\/em><\/strong> (est\u00e1 en la rama de app-&gt;res-&gt;layot), y selecciona New-&gt;Layout resource file.<\/p>\n<p><strong>Paso 2.<\/strong> En la ventana que se abre, escribre como <strong>File name<\/strong>: list_item, y como <strong>Root element<\/strong>: LinearLayout. Pulse Ok.<\/p>\n<div id=\"attachment_1619\" style=\"width: 1658px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/05Ventana-New-Resource-File.jpeg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1619\" class=\"size-full wp-image-1619\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/05Ventana-New-Resource-File.jpeg\" alt=\"Ventana New Resource File\" width=\"1648\" height=\"956\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/05Ventana-New-Resource-File.jpeg 1648w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/05Ventana-New-Resource-File-300x174.jpeg 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/05Ventana-New-Resource-File-768x446.jpeg 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/05Ventana-New-Resource-File-1024x594.jpeg 1024w\" sizes=\"auto, (max-width: 1648px) 100vw, 1648px\" \/><\/a><p id=\"caption-attachment-1619\" class=\"wp-caption-text\">Ventana New Resource File<\/p><\/div>\n<p><strong>Paso 3.<\/strong> Coloca un <em><strong>ImageView<\/strong><\/em> y un <em><strong>TextView<\/strong><\/em> en ese <em><strong>layout<\/strong><\/em>.<\/p>\n<p><strong>Paso 4.<\/strong> Personaliza los componentes para ajustar la imagen a la izquierda del texto, vi\u00e9ndose as\u00ed:<\/p>\n<div id=\"attachment_1620\" style=\"width: 410px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/06Layout-list_item.jpeg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1620\" class=\"size-full wp-image-1620\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/06Layout-list_item.jpeg\" alt=\"Layout list_item\" width=\"400\" height=\"650\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/06Layout-list_item.jpeg 400w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/06Layout-list_item-185x300.jpeg 185w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><p id=\"caption-attachment-1620\" class=\"wp-caption-text\">Layout list_item<\/p><\/div>\n<p>El c\u00f3digo <strong>XML<\/strong> utilizado fue el siguiente:<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n\u00a0 \u00a0 xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n\u00a0 \u00a0 android:orientation=\"horizontal\"\r\n\u00a0 \u00a0 android:layout_width=\"match_parent\"\r\n\u00a0 \u00a0 android:layout_height=\"80dp\"&gt;\r\n\u00a0 \u00a0 &lt;ImageView\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:id=\"@+id\/imageView\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:layout_width=\"wrap_content\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:layout_height=\"wrap_content\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:layout_gravity=\"center_vertical\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:layout_margin=\"25dp\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 app:srcCompat=\"@android:drawable\/btn_star_big_on\" \/&gt;\r\n\u00a0 \u00a0 &lt;TextView\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:id=\"@+id\/textView\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:layout_width=\"wrap_content\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:layout_height=\"wrap_content\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:layout_weight=\"1\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:textColor=\"#333\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:layout_gravity=\"center_vertical\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 android:text=\"TextView\" \/&gt;\r\n&lt;\/LinearLayout&gt;\r\n<\/pre>\n<p><strong>Paso 5.<\/strong> Crea una nueva clase de Java llamada <em><strong>MyAdapter<\/strong><\/em>.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Ve al men\u00fa File-&gt;New-&gt;Java Class<\/p>\n<p>Como nombre de clase usa MyAdapter.<\/p>\n<p><strong>Paso 6<\/strong>. C\u00f3digo de la clase MyAdapter.<\/p>\n<p>Esta clase crea un Adapter personalizado basado en el layout que creamos.<span class=\"Apple-converted-space\">\u00a0 <\/span>El c\u00f3digo es el siguiente:<\/p>\n<pre class=\"lang:java decode:true \">import android.content.Context;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.BaseAdapter;\r\nimport android.widget.TextView;\r\nimport java.util.ArrayList;\r\n\r\npublic class MyAdapter extends BaseAdapter {\r\n\u00a0 \u00a0 private Context context;\r\n\u00a0 \u00a0 private int layout;\r\n\u00a0 \u00a0 private ArrayList&lt;String&gt; names;\r\n\u00a0 \u00a0 public MyAdapter(Context context, int layout, ArrayList&lt;String&gt; names){\r\n\u00a0 \u00a0 \u00a0 \u00a0 this.context = context;\r\n\u00a0 \u00a0 \u00a0 \u00a0 this.layout = layout;\r\n\u00a0 \u00a0 \u00a0 \u00a0 this.names = names;\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public int getCount() {\r\n\u00a0 \u00a0 \u00a0 \u00a0 return this.names.size();\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public Object getItem(int position) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 return this.names.get(position);\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public long getItemId(int id) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 return id;\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 @Override\r\n\r\n\u00a0 \u00a0 public View getView(int position, View convertView, ViewGroup viewGroup) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Copiamos la vista\r\n\u00a0 \u00a0 \u00a0 \u00a0 View v = convertView;\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/Inflamos la vista con nuestro propio layout\r\n\u00a0 \u00a0 \u00a0 \u00a0 LayoutInflater layoutInflater = LayoutInflater.from(this.context);\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 v= layoutInflater.inflate(R.layout.list_item, null);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Valor actual seg\u00fan la posici\u00f3n\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 String currentName\u00a0 = names.get(position);\r\n\u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Referenciamos el elemento a modificar y lo rellenamos\r\n\u00a0 \u00a0 \u00a0 \u00a0 TextView textView = (TextView) v.findViewById(R.id.textView);\r\n\u00a0 \u00a0 \u00a0 \u00a0 textView.setText(currentName);\r\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/Devolvemos la vista inflada\r\n\u00a0 \u00a0 \u00a0 \u00a0 return v;\r\n\u00a0 \u00a0 }\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Paso 7<\/strong>. Enlazar con nuestro adaptador personalizado.<\/p>\n<p>En el <em><strong>MainActivity<\/strong><\/em>, agregamos las siguientes l\u00edneas:<\/p>\n<pre class=\"lang:java decode:true \">MyAdapter myAdapter = new MyAdapter(this, R.layout.list_item, names);\r\nlistview.setAdapter(myAdapter);<\/pre>\n<p>Y listo!<\/p>\n<div id=\"attachment_1624\" style=\"width: 558px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/08-ListView-personalizado-en-Android.jpeg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1624\" class=\"size-full wp-image-1624\" src=\"http:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/08-ListView-personalizado-en-Android.jpeg\" alt=\"ListView personalizado en Android\" width=\"548\" height=\"980\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/08-ListView-personalizado-en-Android.jpeg 548w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2018\/10\/08-ListView-personalizado-en-Android-168x300.jpeg 168w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/a><p id=\"caption-attachment-1624\" class=\"wp-caption-text\">ListView personalizado en Android<\/p><\/div>\n<h3>Referencias:<\/h3>\n<p><strong>1. Android (2018). Vista de lista<\/strong>. Disponible en [<a href=\"https:\/\/developer.android.com\/guide\/topics\/ui\/layout\/listview?hl=es-419\">https:\/\/developer.android.com\/guide\/topics\/ui\/layout\/listview?hl=es-419<\/a>]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un ListView en Android es un objeto que nos permite mostrar una lista de elementos desplazables.\u00a0Veamos ejemplo de c\u00f3mo construirlo paso a paso.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[234],"tags":[198,235,238],"class_list":["post-1610","post","type-post","status-publish","format-standard","hentry","category-aplicaciones-moviles","tag-android","tag-desarrollo-de-aplicaciones-moviles","tag-listview"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1610","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=1610"}],"version-history":[{"count":12,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1610\/revisions"}],"predecessor-version":[{"id":1657,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1610\/revisions\/1657"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=1610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=1610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=1610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}