2011-10-31 74 views
5

我有一個Android項目,使用庫項目(我所構建的所有項目)。我正在使用ADT/SDK v14,我需要訪問主項目中的主類,並在庫項目中的對話框被取消時調用函數。現在,如果我將一個對我的主項目的引用添加到圖書館項目中,我可以這樣做,但這並不理想。我如何從圖書館項目的一個類中獲得對我的主項目中的一個類的引用?從庫類訪問主項目類

這是它是如何工作的:

  • 我有我在我的項目是一個tabhost
  • 的tabhost獲取從庫項目選項卡中的片段
  • 其中一個片段的主類對於標籤啓動一個DialogFragment
  • 當該DialogFragment被駁回,我需要調用主類fillItems()函數(這是我卡)

任何人有任何想法?

感謝, 埃德

+1

從面向對象的角度來看,你不應該以這種方式進行溝通。你不希望你的圖書館與你的主要項目緊密結合;他們很快就會變得「不可共享」。 –

+0

是的,我知道那不是我要走的路,我試圖避開它,但我無法將我的頭圍繞在我需要做的事情上。下面的答案是我需要的。謝謝。 – ssuperz28

回答

5

如何獲得一類在我的主要項目從一類在庫項目的引用?

理想情況下,你不這樣做。

相反,您:

  1. 定義中包含要調用它的實現來自於主體工程
  2. 實施上的一些可能的類接口在您的主項目
  3. 方法庫的接口
  4. 通過一些設置器或通過構造函數參數將實現提供給庫
  5. 讓庫根據需要調用接口實現上的方法
  6. 確保你沒有做這一切

只有這樣,才能字面意思是「在我的主要項目從庫項目一類得到一個類的引用」引入任何種類的垃圾收集的問題是通過反射,這是緩慢的,並使難以維護的代碼。

+0

謝謝!我知道我正在推翻這一點。基於你上面所說的,我在庫中創建了一個全局監聽器,並在我的主類中訂閱它,現在我可以調用我的函數。我不認爲會有任何GC問題,對吧?看起來非常有效。我總是使用你的樣品,他們幫助我擺脫了一些困境。謝謝! – ssuperz28

+0

@ ssuperz28:「我不認爲會有任何GC問題,對吧?」 - 我無法告訴,對不起。 – CommonsWare