2011-10-31 9 views
5

Tengo un proyecto de Android que usa un proyecto de biblioteca (todo lo cual construí). Estoy usando ADT/SDK v14 y necesito acceder a la clase principal en el proyecto principal y llamar a una función cuando se descarta un diálogo en el proyecto de la biblioteca. Ahora, puedo hacerlo si agrego una referencia a mi proyecto principal para el proyecto de la biblioteca, pero eso no es ideal. ¿Cómo obtengo una referencia a una clase en mi proyecto principal de una clase en el proyecto de la biblioteca?Acceda a la clase de proyecto principal desde una clase de biblioteca

Esta es la forma en que está funcionando:

  • tengo mi clase principal en mi proyecto que es un tabhost
  • El tabhost obtiene los fragmentos de las pestañas desde el proyecto de biblioteca
  • Uno de los fragmentos para las pestañas lanza una DialogFragment
  • Cuando se descartó que DialogFragment, tengo que llamar a una función fillItems() en la clase principal (aquí es donde estoy atascado)

¿Alguien tiene alguna idea?

Gracias, Ed

+1

Desde una perspectiva de POO, no se debe comunicar de esa manera. No desea que sus bibliotecas estén estrechamente vinculadas a sus proyectos principales; se convertirán rápidamente en "no compartibles". –

+0

Sí, sabía que ese no era el camino a seguir y estaba tratando de evitarlo, pero no podía entender lo que tenía que hacer. La respuesta a continuación fue lo que necesito para resolverlo. Gracias. – ssuperz28

Respuesta

5

¿Cómo puedo obtener una referencia a una clase en mi proyecto principal de una clase en el proyecto de la biblioteca?

Lo ideal es que no.

En su lugar, usted:

  1. definir una interfaz en la biblioteca que contiene los métodos que desea invocar cuya aplicación viene del principal proyecto
  2. Implementar dicha interfaz en alguna clase de probabilidades en su proyecto principal
  3. de alimentación que la implementación de la biblioteca a través de algún incubadora o por medio de un argumento del constructor
  4. tiene la biblioteca de llamar a los métodos de la interfaz de la aplicación según sea necesario
  5. Asegúrese de que no está introduciendo cualquier tipo de problemas de recolección de basura por hacer todo esto

La única manera de "obtener una referencia a una clase en mi proyecto principal de una clase en el proyecto de biblioteca" es, literalmente, a través de la reflexión, que es lenta y crea un código difícil de mantener.

+0

¡Gracias! Sabía que estaba pensando demasiado en esto. Sobre la base de lo que dijo anteriormente, creé un oyente global en la biblioteca y me suscribí a él en mi clase principal y ahora puedo llamar a mi función. No creo que haya problemas de GC con eso, ¿verdad? Parece bastante eficiente. Uso sus muestras todo el tiempo, me han ayudado a salir de algunos dilemas. ¡Gracias! – ssuperz28

+0

@ ssuperz28: "No creo que haya problemas de GC con eso, ¿verdad?" - No tengo manera de decirlo, lo siento. – CommonsWare

Cuestiones relacionadas