Programación Android, Cómo usar SwipeRefreshLayout

Pull to Refresh
Pull to Refresh

En entradas anteriores hemos explicado cómo utilizar ListViews, optimizarlos e incluso hacerlos customizados. En esta ocasión vamos a explicar cómo facilitar la tarea de actualización de los datos que contiene el ListView deslizando el listado hacia abajo utilizando SwipeRefreshLayout.

Lo primero que debemos tener en cuenta es que esta opción no está presente en todas las API, por lo que tendremos que utilizar la librería support-v4 que nos ofrece Google para facilitar la compatibilidad con versiones anteriores de Android para las nuevas herramientas que ofrecen a los desarrolladores. Esta funcionalidad la tendremos presente a partir de la versión 19.0.0 de la librería suport-v4, sin embargo es recomendable utilizar siempre la versión más actualizada que Google nos ofrece, ya que cada versión puede hacer que varíe la interfaz, y al mantener esta librería actualizada siempre estaremos en la última tendencia de Android (en el momento de escribir esta entrada Material Design).

Para el desarrollo de este ejemplo, como venimos haciendo desde hace tiempo, vamos a utilizar Android Studio, por lo que explicaremos cómo importar la librería necesaria a nuestro proyecto a través del Gradle, para utilizar otros IDEs el proceso para importar la librería puede ser diferente, sin embargo la utilización de la misma será exactamente igual.
Leer más…

Programación Android, Gson – Librería para parsear documentos JSON

En nuestras aplicaciones que conecten con servicios web será muy común realizar la comunicación a través de documentos JSON, y hace tiempo explicamos cómo parsear nosotros esos documentos a datos que pudiéramos utilizar en nuestra aplicación. Sin embargo esta tarea es bastante tediosa si tenemos que realizarla para cada una de nuestras conexiones, ya que podemos llegar a necesitar un sinfín de conexiones distintas, y cada una con su propio código para parsear los datos, y para evitar eso tenemos, entre otras, Gson (de código abierto y desarrollada por Google), una librería para parsear documentos JSON. Además, la potencia de este tipo de librerías es que no sólo nos permite pasar de un documento JSON a objetos Java, sino también a la inversa, convertir uno de nuestros objetos en un documento JSON.

En este tutorial vamos a aprender a utilizar Gson, para parsear en ambas direcciones (documento>java / java>documento) y de paso aprovecharemos para aprender a importar librerías que existen en el repositorio Maven a nuestro proyecto en Android Studio.

Qué es Maven?

En primer lugar vamos a entender qué es Maven, y por qué vamos a utilizarlo para obtener nuestra librería Gson. Según Wikipedia Maven es una herramienta de software para la gestión y construcción de proyectos Java creada por Jason van Zyl, de Sonatype, en 2002. Es similar en funcionalidad a Apache Ant (y en menor medida a PEAR de PHP y CPAN de Perl), pero tiene un modelo de configuración de construcción más simple, basado en un formato XML. Estuvo integrado inicialmente dentro del proyecto Jakarta pero ahora ya es un proyecto de nivel superior de la Apache Software Foundation.

Ahora que sabemos qué es Maven, el motivo por el que vamos a utilizar este repositorio en nuestra aplicación es porque Android Studio, a través del uso de Gradle, nos ofrece la posibilidad de descargar estas librerías directamente desde nuestro proyecto, sin necesidad de buscar archivos por internet para después importarlos al proyecto.

Y qué es Gradle?

Leer más…

Programación Android, Cómo usar múltiples Fragments II

Cómo usar múltiples Fragments
Cómo usar múltiples Fragments

En el primer post de cómo usar múltiples fragments en Android hicimos que, cada vez que se creaba una nueva transacción para mostrar diferentes fragments a la pantalla, se realizaran los cambios necesarios en el mapa que contenía la colección de commits. Pero hay una forma de realizar estas comprobaciones de una forma centralizada (para que todos los cambios para eliminar commits en este mapa esté en un mismo punto), y utilizaremos esta misma opción para controlar qué debe mostrarse en pantalla.

Un ejemplo para aclarar esto, sobre el ejemplo de 3 columnas que estamos trabajando, imaginemos que queremos mostrar la primera columna cuando no haya ningún fragment en la columna central, la columna central cuando tenga un fragment visible, pero no haya ninguno en la tercera columna y la tercera columna cuando contenga un fragment visible. En este caso cada vez que vayamos a mostrar un nuevo fragment tendremos que comprobar cuál está presente y mostrar la columna que queramos mostrar, y podremos hacerlo en cuanto añadimos el fragment, pero ¿qué pasa si le damos al botón atrás del dispositivo? El fragment ya no está visible, pero no tenemos control sobre esto y por lo tanto se sigue viendo la columna que ahora ya está vacía.

Leer más…

Programación Android, Cómo usar múltiples Fragments

Cómo usar múltiples fragments
Cómo usar múltiples fragments

Aprovechando que volvemos a tener tiempo libre en esta ocasión vamos a escribir un tutorial que hacía tiempo que queríamos hacer para explicar cómo usar múltiples fragments en una misma pantalla. En su día ya explicamos cómo usar los fragments, pero utilizando tabs, o pestañas, para mostrarlos, en esta ocasión explicaremos cómo tener el control del estado de estos para poder mostrar los datos en pantalla de forma correcta. Es decir, imaginemos que tenemos la pantalla dividida en 3 columnas diferentes, cada una de estas columnas es un área para mostrar fragments, y la última columna la dividimos en 2 filas, de manera que tendríamos un total de 4 áreas para fragments. Estando en landscape (dispositivo en horizontal) tenemos espacio de sobra para mostrar toda la información, sin embargo si giramos a portrait (vertical) estas áreas serán demasiado pequeñas como para mostrar todo lo que queremos, por lo que deberíamos mostrar el último detalle añadido, es decir, la última de las columnas que contengan datos. Sin embargo, al volver a landscape tendríamos que volver a mostrar todas las áreas de nuevo.

Por otra parte, si estamos mostrando información en la última columna, y decidimos cargar otra información distinta posteriormente, tendríamos que mantener la lógica de la cola de fragments que vayamos creando, para que al darle al botón atrás mantengamos una navegación lógica para el usuario, por lo tanto tenemos que crear una lógica que nos permita controlar distintos niveles, para añadir y eliminar fragments donde lo necesitemos.

Leer más…

Programación Android, Creación de un control personalizado

Control personalizado
creación de un control personalizado

En Android existe una gran cantidad de controles que podemos utilizar para conseguir realizar las interfaces que necesitemos, pero una de las posibilidades que nos ofrece es la de crear nuestros propios controles personalizados, de manera que en un único control, creado por nosotros mismos, podamos crear múltiples controles. El clásico ejemplo es el de la gestión de una ventana de login, en la que existen dos campos en los que escribir texto (usuario y contraseña), y un botón para aceptar el login.

En Internet pueden encontrarse muchos tutoriales sobre la creación de un control personalizado, y muchos de ellos utilizando el propio ejemplo del login para explicarlo. Sin embargo siempre hemos echado en falta un elemento que nos gustaría explicar en este tutorial. Esto es la posibilidad de configurar los eventos onClick de los elementos internos de nuestro control personalizado utilizando atributos en xml. Como sabéis, desde xml podemos configurar el atributo android:onClick=””, dándole como valor el nombre del método que debe lanzarse, y que posteriormente tenemos que codificar en nuestra Activity en Java. Sin embargo este evento, si lo escribimos tal cual sobre nuestro control, se lanzará cuando se pulse sobre cualquier zona del control, y no tendríamos la capacidad de lanzarlo únicamente cuando se pulsara, por ejemplo, el botón para aceptar el login antes citado.

Creación de un control personalizado

Como el ejemplo del login está muy utilizado, nosotros vamos a crear un control diferente, en el que pondremos un botón a cada lado, y entre ambos botones posicionaremos un texto, que irá cambiando a medida que se pulse uno u otro botón. En primer lugar crearemos el xml con el layout que dará forma a nuestro control personalizado:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal">

    <Button
        android:id="@+id/btPREV_SLIDER_CUSTOMER_DETAILS"
        android:background="@android:color/transparent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="<"/>

    <TextView
        android:id="@+id/tvSliderText_SLIDER_CUSTOMER_DETAILS"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:maxLines="1"
        android:gravity="center"/>

    <Button
        android:id="@+id/btNext_SLIDER_CUSTOMER_DETAILS"
        android:background="@android:color/transparent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=">"/>

</LinearLayout>

Como hemos dicho, tenemos un botón en cada lado, a los que hemos dado un fondo transparente, y entre ambos botones hemos colocado un TextView que contendrá el texto que queramos mostrar.
Leer más…

Programación Android, Creación de Widgets II

Creación de widgets
Después de un tiempo excesivo de inactividad (lo lamentamos, pero entre cursos, viajes y trabajo ha sido imposible sentarse a escribir una nueva entrada), volvemos a la carga para terminar el tutorial que dejamos a medias sobre cómo crear widgets.

En la anterior entrada comenzamos con la creación de widgets, para que el sistema lo detectara como tal y pudieramos agregarlo a la pantalla principal del dispositivo. En esta ocasión vamos a retomar este ejemplo, y vamos a añadirle la posibilidad de interactuar con él. Lo que vamos a crear es un sencillo widget que nos va a permitir cambiar el estado del sonido del dispositivo, intercambiando entre el volumen que haya dejado el usuario en el dispositivo y ponerlo en silencio con vibración.

Creación de widget

En primer lugar, para poder hacer esto, vamos a modificar el xml del widget, cambiando el TextView que contiene por un ImageView que nos permitirá configurar un recurso que indique al usuario si el dispositivo está en silencio o no, y cambiarlo cada vez que el usuario pulse sobre nuestro widget, además le eliminaremos el shape que inicialmente configuramos:
Leer más…

Programación Android, Creación de Widgets I

widgets

En muchas ocasiones podemos encontrarnos en Google Play aplicaciones que tienen sus propios Widgets, incluso aplicaciones que sólo contienen Widgets para mostrar cierta información al usuario.

En este tutorial vamos a explicar cómo podemos crear y utilizar estos Widgets, que nos pueden ser muy útiles, e incluso necesarios, en nuestras aplicaciones.

En primer lugar debemos saber que un Widget es un cuadro gráfico que ocupa 1 o más espacios en el escritorio del dispositivo, permitiendo a una aplicación mostrar información de forma dinámica a través de su Widget, o al usuario interactuar de una forma más sencilla y rápida con la aplicación. Por ejemplo una aplicación puede mostrar datos de consumo de llamadas realizadas de forma dinámica en el Widget, de manera que el usuario pueda visualizar esta información de una forma más sencilla, o bien puede tratarse de un Widgetcuya finalidad sea la de silenciar el teléfono, de manera que las sucesivas pulsaciones sobre el Widgetpor parte del usuario irá alternando entre el estado “silencio” y “con sonido” del terminal.

Creación de Widgets

Para diseñar un Widget de forma eficiente, antes debemos dar respuestas a las siguientes preguntas:
Leer más…

Programación Android, Cómo usar Fragments con ViewPager y efecto Swipe

Cómo usar Fragments con ViewPager y efecto Swipe
ActionBar con Pestañas

En esta ocasión vamos a crear un tutorial sobre cómo usar Fragments con ViewPager y efecto Swipe, es decir, mostraremos un conjunto de pestañas en la parte superior de la pantalla y cada pestaña tendrá asignado un Fragment para mostrar una determinada información en pantalla, y habilitaremos el efecto Swipe (desplazamiento lateral) para que se muestre de forma correcta la pestaña seleccionada en todo momento.

Como en los ejemplos que se pueden ver por internet sólo explican cómo crear pestañas que contengan pantallas en blanco, o con poca información, y si se utiliza el manager que nos ofrece el ADT para crear este tipo de controles nos crea un archivo que contiene todas las clases que se utilizan (lo que no permite organizar el código como más le guste a uno), en esta ocasión vamos a crear clases diferentes para los fragments que podamos utilizar, para el adaptador que se necesita para gestionar los Tabs (pestañas), etc. La compatibilidad que obtendremos usando las librerías nativas será a partir de API 11, que corresponde a la versión 3.0 de Android.
Leer más…

Programación Android, NotificationManager y NotificationCompat II

Hace un par de meses explicamos cómo mostrar notificaciones en Android, sin embargo el ejemplo se quedó a la espera de completar los parámetros de la notificación para abrir la aplicación y añadiendo un BroadcastReceiver que también lance la notificación.

En primer lugar vamos a explicar el código que necesitamos para lanzar la aplicación al pulsar la notificación, sobre la notificación que ya creamos para nuestro Service. Para hacer esto necesitamos, en primer lugar, crear un Intent que llame a la Activity que queremos abrir. Posteriormente crearemos un PendingIntent que será el que contenga la configuración que necesitamos para que cuando pulsemos la notificación se comporte como queremos, abriendo la Activity que hemos indicado en el Intent.

Como el término PendingIntent es la primera vez que aparece por aquí, antes de crearlo vamos a explicar qué es y qué hace. Este objeto es el que permite a componentes externos a nuestra aplicación, generalmente desarrollados por terceros, que ejecuten un trozo de código que nosotros indicamos, en este caso su utilidad será la de permitir que el NotificationManager sea capaz de lanzar el Intent que nosotros hemos configurado. Para dar una idea más sencilla de lo que hace un PendingIntent, se puede entender como un Intent que se manda al sistema, pendiente de una ejecución futura, pero de la que desconocemos cuándo se producirá.

Leer más…

Programación Android, NotificationManager y NotificationCompat

En las últimas publicaciones hablamos sobre cómo crear un Service y cómo crear un BroadcastReceiver. Pero muchas veces, cuando utilicemos estos componentes, necesitaremos que se avise al usuario por medio de una notificación en la barra de notificaciones del terminal, bien al terminar un Service, bien al recibir una llamada al BroadcastReceiver.

La clase NotificationManager, en Android, es la clase que se encarga de gestionar las notificaciones que se deben mostrar en la barra de notificaciones del terminal. Para poder mostrar una notificación, por lo tanto, necesitaremos crear un objeto de esta clase y configurar los parámetros necesarios de la notificación que queremos mostrar.

Para explicar su uso vamos a crear un ejemplo en el que, al pulsar un botón, vamos a iniciar un Service, para que simulará un trabajo de 10 segundos,  y al terminar muestre una notificación. También aprovecharemos el ejemplo de la publicación del BroadcastReceiver para generar una notificación cada vez que pongamos a cargar el terminal.

Leer más…