2012-10-24 41 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

是的,这将是最好的选择,但有时你没有时间按照他们应该完成的方式来完成任务。 –