2012-10-24 78 views
3

想象一下,我有一個攝像頭應用程序,我在一個角落顯示一個小型MapView,顯示設備位於何處。所以我必須從MapActivity擴展我的活動才能做到這一點。根據安裝的庫從MapActivity或Activity擴展課程

然後想象我想在沒有Google Apis的設備中發佈我的應用,例如Kindle。由於MapActivity不再存在,我應該從常規活動延伸。

我知道我可以設置

<uses-library 
     android:name="com.google.android.maps" 
     android:required="false" /> 

讓用戶安裝,即使庫缺少應用程序。然後使用

try { 
     Class.forName("com.google.android.maps.MapView"); 
     googleMapsEnabled = true; 
    } catch(ClassNotFoundException e) { 
     googleMapsEnabled = false; 
    } 

檢查MapView類是否存在。

但問題是我擴展的基類,如果Google地圖不可用,它應該是Activity而不是MapActivity。

我的問題是,我怎樣才能使用相同的代碼來支持這兩個選項,而不需要根據安裝的庫將整個代碼複製到不同的類中?

回答

0

對於什麼是值得的,我通常的做法是這樣的(例如:我的在不同場景下從兩個不同的基類繼承,但最終需要相同或幾乎相同的行爲)是盡我所能將常見的功能分解成我從這兩個類調用的靜態幫助類。

+0

在我的情況下,幾乎整個應用程序將在這個輔助類,這不是一個選項,因爲它太複雜 –

+0

嗯。不確定,那麼 - 我承認,我對你的情況並不熟悉,但作爲一條規則,如果你編碼Java並且你需要從兩個不同的基類繼承,你必須創建兩個類。如果你不想複製東西,你必須將它們移出到一些可重用的空間。 如果您的整個應用程序都在繼承自Activity的類中,是否有意義將它分解爲可重用的較小塊? –

+0

是的,這將是最好的選擇,但有時你沒有時間按照他們應該完成的方式來完成任務。 –