2011-10-31 12 views
5

Ho un progetto Android che utilizza un progetto di libreria (tutto ciò che ho creato). Sto usando ADT/SDK v14 e ho bisogno di accedere alla classe principale nel progetto principale e chiamare una funzione quando una finestra di dialogo nel progetto della libreria viene chiusa. Ora, posso farlo se aggiungo un riferimento al mio progetto principale al progetto della biblioteca, ma non è l'ideale. Come posso ottenere un riferimento a una classe nel mio progetto principale da una classe nel progetto della biblioteca?Accesso alla classe di progetto principale da una classe di libreria

Ecco come funziona:

  • ho la mia classe principale nel mio progetto che è un tabhost
  • Il tabhost ottiene i frammenti per le schede del progetto biblioteca
  • Uno dei frammenti per le schede lancia un DialogFragment
  • Quando ciò DialogFragment è respinto, ho bisogno di chiamare una funzione fillItems() nella classe principale (questo è dove mi sono bloccato)

Qualcuno ha qualche idea?

Grazie, Ed

+1

Da una prospettiva OOP, non si dovrebbe comunicare in questo modo. Non vuoi che le tue librerie siano strettamente collegate ai tuoi progetti principali; diventeranno rapidamente "non condivisibili". –

+0

Sì, sapevo che non era la strada da percorrere e stavo cercando di evitarlo, ma non riuscivo proprio a capire cosa dovevo fare. La risposta qui sotto era ciò di cui avevo bisogno per farcela. Grazie. – ssuperz28

risposta

5

Come faccio ad avere un riferimento a una classe nel mio progetto principale da una classe nel progetto di biblioteca?

Idealmente no.

Al contrario, è:

  1. definire un'interfaccia nella biblioteca che contiene i metodi che si desidera richiamare la cui attuazione viene dal progetto principale
  2. attuare tale interfaccia su qualche classe probabilmente nel progetto principale
  3. Fornire tale implementazione alla libreria tramite un setter o tramite un argomento costruttore
  4. Fare in modo che la libreria richiami i metodi sull'implementazione dell'interfaccia come necessario
  5. Assicurarsi che non stanno introducendo alcun tipo di problemi di raccolta dei rifiuti facendo tutto questo

L'unico modo per letteralmente "ottenere un riferimento a una classe nel mio progetto principale da una classe nel progetto di biblioteca" è tramite riflessione, che è lento e rende difficile il codice di manutenzione.

+0

Grazie! Sapevo che stavo pensando troppo a questo. Basandomi su ciò che hai detto sopra, ho creato un listener globale nella libreria e l'ho sottoscritto nella mia classe principale e ora sono in grado di chiamare la mia funzione. Non penso che ci sarebbero problemi con il GC, giusto? Sembra abbastanza efficiente. Io uso i tuoi campioni tutto il tempo, mi hanno aiutato ad uscire da alcuni dilemmi. Grazie! – ssuperz28

+0

@ ssuperz28: "Non penso che ci sarebbero problemi con il GC, giusto?" - Non ho modo di dirlo, mi dispiace. – CommonsWare

Problemi correlati