Programación Android, ListView & Adapter personalizado II

En la anterior entrada creamos un Adapter personalizado para mostrar una vista creada por nosotros en cada ítem del ListView, pero ya comentamos que tenía un problema de optimización.

Este problema consistía en que siempre estábamos creando una nueva vista por cada ítem que contenía la colección que queríamos mostrar en el ListView, por lo que si utilizamos una colección muy grande, creamos demasiadas vistas, lo que consumiría mucha memoria (algo sobre lo que prestar mucha atención en un smartphone).

En realidad esto no es del todo cierto, Android lo que hace es almacenar sólo 13 de estas vistas del ListView en la memoria. Sin embargo sí que estamos haciendo demasiadas llamadas a crear vistas en el anterior Adapter, problema que se arregla reutilizando las vistas, teniendo en cuenta que ya previamente las habíamos creado.

Leer más…

Programación Android, ListView & Adapter personalizado I

Ahora que hemos empezado a manejar adaptadores y listas con el Spinner, vamos a dar un paso más, utilizando el control ListView y gestionando su contenido con un Adapter personalizado, de manera que lo que visualicemos en cada celda de la lista esté diseñado por nosotros mismos.

Creando el ListView

En primer lugar debemos crear nuestro interfaz de usuario. Lógicamente debemos añadir un ListView, en el que mostraremos los datos que queramos, y en nuestro caso vamos a incorporar en la parte superior algunos TextView que indicarán el nª de la celda que ocupa el ítem seleccionado del ListView y el texto que contenga.

Quedaría así:

Layout ListView
Layout ListView

Leer más…

Programación Android, cómo usar un Spinner II

En la anterior entrada dimos los primeros pasos en el uso del Spinner en Android, añadiendo las opciones que queríamos que se incluyeran en él y quedamos a falta de ver cómo gestionar la opción elegida del Spinner.

Creando las descripciones

En primer lugar vamos a crear una nueva variable, que va a incluir las descripciones de los animales. Para ello vamos a usar un TreeMap, que contendrá como clave el nombre del animal, y como valor su descripción:

private TreeMap<String, String> descrip;

Y creamos un método que va a rellenar los datos de la variable:

public void rellenarDescripciones() {
	// Inicializamos la variable.
	descrip = new TreeMap<String, String>();

	// Rellenamos la variable con las descripciones.
	descrip.put(
		"Perro",
		"Mamífero carnívoro de la familia de los cánidos, doméstico, con cuatro patas, un olfato muy fino y de gran diversidad de tamaños, formas y pelajes, que sirve al ser humano como animal de compañía o para cazar.");
	descrip.put(
		"Gato",
		" Mamífero carnívoro doméstico, de la familia de los félidos, de patas cortas y uñas retráctiles, cabeza redonda, y pelo espeso y suave; suele tenerse como animal de compañía: el gato es un hábil cazador de ratones.");
	descrip.put(
		"Caballo",
		"Mamífero équido, macho, de cuerpo fuerte, orejas pequeñas, cola cubierta de largo pelo y patas terminadas en casco; es herbívoro, se domestica con facilidad y se suele usar para montar en él.");
	descrip.put(
		"Canario",
		"Pájaro de plumaje amarillo, verdoso o casi blanco, muy apreciado por su canto y que se suele criar como ave doméstica.");
	descrip.put(
			"Vaca",
			"Hembra del toro. De joven se denomina ternera, becerra, vaquilla o novilla. Su leche constituye un alimento completísimo y, después de la de burra, es la más parecida a la de la mujer.");
	descrip.put(
		"Cerdo",
		"Mamífero doméstico de cuerpo grueso, patas cortas, cabeza grande, orejas caídas, hocico chato y casi cilíndrico y cola en forma de hélice, que se cría para aprovechar su carne.");
}

Leer más…

Programación Android, cómo usar un Spinner I

Después de un par de semanas de inactividad, debido a que ha habido que finalizar 2 proyectos y apenas ha quedado tiempo libre, volvemos a la publicar una nueva entrada.

En esta ocasión vamos a intentar explicar el uso y comportamiento de un Spinner.

Un Spinner es un elemento que ofrece un desplegable en el que poder seleccionar una de múltiples opciones, en el que además se visualiza la opción seleccionada de entre las disponibles:

Spinner desplegado
Spinner desplegado

Leer más…

Programación Android, clase CountDownTimerWithPause

Androids_medico

Bueno, hoy investigando nuevas cosas para añadir a un proyecto personal que estoy llevando a cabo me he encontrado con una utilidad muy básica, pero muy buena. En Android tenemos el problema de que la clase CountDownTimer no admite hacer pause/resume, por lo que tenemos que programarlo nosotros cada vez que llamamos al método cancel. Pues esto lo ha solucionado Andrew Gainer, creando una clase que se basa en el funcionamiento del CountDownTimer de android, pero sí implementa la posibilidad de pause/resume.

Os dejo la clase aquí para que podáis usarla también a vuestro antojo:
Leer más…

Programación Android, Recursos XML III (Shape)

android_resources

Esta será la tercera y última entrada sobre la definición de recursos XML. Como dijimos en la segunda parte, en esta ocasión vamos a definir el shape para el botón, e indicaremos cómo acceder a los recursos desde el código Java.

En primer lugar, definamos un shape para el botón. Para eso lo primero es crear un nuevo archivo XML, que se llame buttonshape.xml. Al crearlo no vamos a utilizar el tipo de recurso “value”, sino que le indicaremos que es un “Drawable”, y en las opciones que nos aparecerán en la parte inferior, definiremos que es un Shape:

Crear shape en proyecto android
Crear shape en proyecto android

Leer más…

Programación Android, enviar datos a una segunda Activity

En esta entrada vamos a explicar cómo se deben enviar datos a una segunda Activity para poder recogerlos en esta segunda Activity y mostrarlos en pantalla.

Para esto, en el Layout de la primera actividad hemos introducido un EditText en el que escribiremos el texto que queremos que se muestre en la segunda actividad, y un botón que va a recoger este texto y va a iniciar la segunda actividad, pasándole los datos.
El layout quedaría así:
Layout Activity1

Leer más…

Programación Android, ciclo de vida de una app

Creación de una actividad

Las actividades en Android son clases públicas que representan cada una de las pantallas de nuestra aplicación y que heredan de la clase base android.app.Activity mediante la palabra reservada extends.
Cuando se crea la actividad en el entorno Eclipse, se crea por defecto el método onCreate(). Toda actividad sobrescribe este método, que es el punto inicial del ciclo de vida de una actividad, y es invocado cuando la actividad se inicia. Además, la mayoría de las actividades también deben implementar el método onPause(), donde se guardan datos y el estado antes de que la actividad deje de ser visible. El estado de la actividad se almacena en un objeto de la clase Bundle, que contiene el estado anterior de la actividad en caso de que haya sido suspendida.
Según el ciclo de vida de una actividad, después de iniciar una actividad se puede pausar o detener de forma momentánea si el usuario está realizando otras funciones en el teléfono. si esto ocurre, la actividad deberá iniciarse nuevamente, y es entonces cuando la información de este Bundle es útil.

Ciclo de vida de las actividades

Las aplicaciones Android funcionan con un ciclo de vida controlado por el propio sistema operativo. Este ciclo de vida depende de la situación en que se encuentre en cada momento la aplicación. Desde que se crea hasta que se destruye, sus actividades (Activity) pueden encontrarse en distintos estados. Se considera de interés para cualquier proyecto conocer los ciclos de vida, ya que deberemos programar los métodos necesarios para que nuestra aplicación funcione correctamente.
Ciclo de Vida Android

Leer más…

Primeros pasos con Java, colecciones dinámicas

En el último post sobre java hablamos de los arrays, una clase que nos permite crear una colección de objetos, que si bien es muy interesante saber utilizar, tiene una serie de limitaciones que se solventan con otras colecciones existentes en Java. Podemos encontrar también unas colecciones dinámicas que no tienen un tamaño fijado previamente al crear el objeto, sino que nos permite añadirle datos a la colección según nos haga falta, aumentando su tamaño de forma dinámica con cada dato añadido.
Leer más…

Primeros pasos con Java, arrays

Un array o matriz es una estructura homogénea compuesta de varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria.
Los arrays, también conocidos como vectores, matrices o arreglos, son objetos, pero con algunas características propias. Pueden ser asignados a objetos de la clase Object y los métodos de Object pueden ser utilizados con arrays.
Algunas de sus características más importantes de los arrays son las siguientes:

  • Los arrays se crean con el operador new, seguido del tipo y número de elementos.
  • La longitud de los arrays se establece mediante su creación, y una vez establecida no se puede modificar.
    No se podrá por tanto insertar posiciones ni eliminar posiciones (sí el contenido de éstas).
  • Se accede a sus elementos con los corchetes (“[” y “]”), y un índice que varía de 0 para su primera posición, hasta su longitud-1.
  • Se pueden crear arrays de objetos de cualquier tipo y de tipos primitivos. En principio un array de objetos es un array de referencias que hay que completar llamando al operador new.
  • Los elementos se inicializan al valor por defecto del tipo correspondiente (cero para valores numéricos, el caracter nulo para char, false para boolean, null para Strings y referencias).
  • Como todos los objetos, los arrays se pasan como argumentos a los métodos por referencia.
  • Se pueden crear arrays anónimos (por ejemplo, crear un nuevo array como argumento actual en la llamada al método).

Leer más…