LectorRSS actualización 1.3.2

Resumido:
La interfaz de usuario de LectorRSS no está preparada para tablets y además en aquellas con Honeycomb o ICS no se podía acceder al menú de la primera pantalla. Ahora, aunque sigue sin aprovechar el mayor tamaño de las pantallas de las tablets, se puede acceder a los distintos menús de las distintas pantallas. En una palabra, se puede usar.
Algunos cambios en el código de la aplicación que no afectan al funcionamiento externo de esta.

En detalle:
El problema con las tablets es que a esta primera activity (la de la primera pantalla), la de las fuentes web a las que estás subscrito, así como en la que muestra la entrada, descripción o enlace web, tengo puesto el tema sin barra de título: (android:theme="@android:style/Theme.NoTitleBar", en la etiqueta de la activity en el manifest).
Y no encontraba la manera, que no fuese muy rebuscada para mí en este momento, de que en las versiones 3.+ y 4.+ de android apareciese la barra con el acceso al menú y en las 2.+ siguiese sin aparecer la barra del título de la aplicación.
Finalmente me cogí los libros de Commonsware y me fuí a un capitulo en el que habla sobre esto y Honeycomb (el libro trata de este, en nuevas versiones trata de ICS también) trata distinto si el target de la aplicacion es 11 o superior que si es para versiones inferiores. Y yo tenía puesto con target el 14, por haber usado la última versión de sdk de admob, y como mínimo el 7 (2.1). Este sdk necesita de algunas opciones que sólo están en 14 o superior y la cagué borrando anteriores sdk’s de admob. Probé a borrar el target y dejar el mínimo y…..funciona. Toda esta parrafada que es inferior al dolor de cabeza que me ha producido esto se reduce a sustituir esto:<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14"/> en el manifest por esto:<uses-sdk android:minSdkVersion="7"/>.

El cambio en el código interno se refiere a un arraylist y no estoy convencido de que el cambio esté de acuerdo a normas establecidas de programación en android, pero me facilita la vida. Me explico un poco:
Tengo un ArrayList que contiene la lista de fuentes web a la que estás subscrito y que es la que se muestra en la primera Activity. Al añadir una nueva fuente usaba el Bundle para pasar los datos de la nueva fuente y al volver a la Activity inicial hacía el trabajo para añadir estos datos al array. Cuando se pulsaba sobre el canal, a partir de aquí uso canal en vez de fuente, nos íbamos a otra Activity a la que le pasaba la posición de este en el ArrayList y un campo de identificación unívoco en la base de datos para que esta nueva Activity pudiera crear el canal y extraer los datos necesarios para cargar las entradas. Al volver volvía a pasar datos sobre el número de entradas no leídas y de las que todavía estaban marcadas como nuevas para actualizar los datos completos en la Activity principal.
Lo veía demasiado enrevesado, así que el cambio ha consistido en construir una clase de apoyo de la que sólo se puede crear un objeto a través de un método estático. Con esta clase creo el ArrayList y así lo tengo disponible en toda la aplicación y he de jugar menos con el Bundle y la base de datos. La clase es esta:
public class Apoyo {
private static Apoyo apoyo;
private ArrayList canales;

private Apoyo(){
}

public static Apoyo fabrica(){
if(apoyo == null){
apoyo = new Apoyo();
}
return apoyo;
}

public void fabricaNull(){
apoyo = null;
}
public ArrayList getCanales(){
if(canales == null){
canales = new ArrayList();
}
return canales;
}

public void canalesNull(){
canales = null;
}
}

Básicamente es una aproximación al patrón Singleton, no sé si bien hecha, pero funciona. Nunca había entendido bien este patrón hasta ahora.
Lo que hace es construir una clase con el acceso al constructor puesto como privado. Nadie que no sea la propia clase puede acceder a él.
Para poder crear un objeto es necesaria una manera de acceder al constructor desde fuera. Esto se consigue gracias al método estático que es público y por lo tanto accesible, y al ser estático, sin necesidad de construir el objeto.
Este método comprueba si ya ha creado un objeto mirando la variable que la propia clase tiene para usar como referencia. Si es null, crea una nueva. Si no, usa la que ya tiene.
Lo mismo hace con el método para crear el arraylist de los canales. De esta manera siempre que se use esta clase para llegar a los canales se usará el mismo objeto.
Esto da algunos problemas, pero sobre eso ya hablaré cuando desarrolle el tutorial sobre las entrañas de LectorRSS que por ahora está aparcado, pero no abandonado.

Una última cosa, o no sé usar la etiqueta para introducir código que me ofrece WordPress o es una mierda. Y una segunda cosa, la explicación me ha salido más enrevesada de lo que quería.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s