簡體   English   中英

從Android庫項目覆蓋類

[英]Overriding a Class from Android Library Project

我使用類似的代碼制作了一些Android應用程序,但我需要保持靈活性以自定義應用程序。 現在我的解決方案是,我有一個Library-Project,可以通過擴展類在Project中覆蓋功能。 對於以下示例,我將其稱為Library Project PL。 P1是使用PL的定制項目,P2是使用PL的另一個定制項目。

現在的問題是,在PL中,我想從StudentPL.java創建一個實例。 在P1中,無需對StudentPL進行任何更改,因此編譯器應采用此類,但在P2中,我有從StudentPL.java擴展的StudentP2.java。 因此,在PL中創建的實例應該是StudentP2.java的實例。

我現在的想法是,制作一個名為mirror的軟件包,該軟件包直接位於Project PL的src文件夾中。 在那里,我創建了從StudentPL.java擴展的mirror.Student.java類。 在Library-Project中,我現在成為Student.java的實例。 對於項目P1,不需要更改。 在P2中,我在src Folder中創建了相同的文件夾鏡像,並且現在從StudentP2.java擴展了相同的類mirror.Student.java。 想法是,ClassLoader現在從P2加載mirror.Student.java,而從PL忽略mirror.Student.java,但這會導致以下錯誤:

  • Dex Loader]無法執行dex:多個dex文件定義了Lmirror / Student;
  • 轉換為Dalvik格式失敗:無法執行dex:多個dex文件定義了Lmirror / Student

這是我在說的UML:

http://www.koenix-band.ch/images/other/Stackoverflow.gif

也許我應該覆蓋ClassLoader,但是我不知道該怎么做? 有誰有解決這個問題的想法? 也許有人有另一個想法,我該如何自定義應用程序。

麥可

我認為最好使用setStudent或類似方法將MainActivityPL抽象化。 大部分活動及其所有邏輯仍將從您的庫中共享,但是通過擴展StudentPL類,您的其他項目可以選擇使用不同的學生對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM