2011-02-10 8 views
8

¡Hola! (Disculpas por la larga publicación aquí)Android Library Project - Definición de clases

Estoy escribiendo algunas aplicaciones que se basarán esencialmente en el mismo código.

Cada aplicación tendrá sus diferencias, algunas tendrán nuevas actividades, todas tendrán diferentes recursos asignados.

Estoy intentando usar un proyecto de la biblioteca Android para poder colocar todo el código común en un solo lugar, por lo que los cambios importantes solo se deben realizar una vez y todos los proyectos se actualizarán.

Ahora, los recursos son una solución fácil, ya que solo puedo definir cada recurso en la aplicación principal y estos anularán los del proyecto de la biblioteca siempre que las convenciones de nomenclatura permanezcan iguales.

Ahora, mi pregunta es ¿cómo hago lo mismo pero para las clases? Por ejemplo, tendré una vista base como un contenedor para código común en todas las vistas. en esto, lanzo varias actividades. ¿Qué sucede si las tres aplicaciones necesitan iniciar una actividad diferente, ya que contendrán diferentes interfaces y funciones? ¿Cómo voy a hacer esto? El proyecto de la biblioteca nunca sabrá que el proyecto principal desea usar una actividad diferente, como ya se ha compilado.

Tengo un par de soluciones que he pensado, pero quiero saber si alguien más tiene algunas ideas. Sería de gran ayuda para cualquier comentario aquí:

  1. la actividad en el Proyecto Biblioteca que se pondrá en marcha almacena una referencia a la clase para ser cargado, que se definirá en la aplicación principal en su lanzamiento . Esto fue cuando el proyecto de la biblioteca llama a esta actividad, puede cargar lo que se le dijo.

  2. Dejo toda la funcionalidad que no cambiará dentro de la actividad de proyectos de la biblioteca. Luego extiendo esta actividad y anulo el onCreate para hacer lo que necesito aquí (como cargar diferentes diseños, configurar vistas, etc.). Ahora esto tiene un inconveniente, ya que tengo que definir la mayoría de los puntos de entrada en mi aplicación principal en lugar de en el proyecto de la biblioteca.

Espero que sigas mi problema aquí. Por favor, pregunta si he explicado esto mal.

Gracias,

Adam

+0

Creo que puedo haber encontrado una solución. Al usar la reflexión y el método setClassName para Intents, el Proyecto de Biblioteca no necesita tener la instancia de Clase disponible. La aplicación principal ahora puede definir estas clases, y el proyecto de la biblioteca podrá llamarlas. Parece que funciona bien hasta ahora! – Mimminito

+2

Me encontré con el mismo problema. Podrías poner tu código de reflexión ya que creo que también resolverá mi problema. –

Respuesta

0

O más sencillo: ¿Debe utilizar la herencia o la composición para lograr ese tipo de flexibilidad?

Tuve este tipo de búsqueda de estructura también. Normalmente lo resolvería reutilizando un patrón & que rompa las partes necesarias del código en trozos más pequeños. Es decir. si sabe que la diferencia son las vistas, extráigalas en algunas clases distinguidas que se implementarán en una interfaz común y consulte la interfaz en sus actividades base.

Algunos enlaces para usted:

Al menos desde cómo entiendo su pregunta, esto es más de un Pregunta de diseño OOP.