修改:有关详细操作方法,请查看my answer。
我现在已经挣扎了两天,希望有人可以提供帮助。
我正在尝试将最新的ActionBarSherlock(4.0)与MapView一起使用。我知道片段存在问题,但我不需要它们。但我需要Loaders,看来,使用Loaders我也必须扩展FragmentActivity。没问题,我想,我们有来自Pete Doyle的android-support-v4-googlemaps。正如许多SO线程和Google网上论坛所建议的,我使用android-support-v4-googlemaps JAR(实际上是android-support-v13-r7-googlemaps.jar)而不是android-support-v4.jar来构建ABS。然后我用它作为我项目的库。
现在,我希望以这种方式开展活动:
public class BananoutMapActivity extends SherlockFragmentActivity implements LoaderCallbacks<ArrayList<EventItem>>{
问题:
它编译,但抛出运行时错误:E/AndroidRuntime(29159): java.lang.NoClassDefFoundError: ndl.klimczak.bananout.BananoutMapActivity
我已经三次检查过的事情:
<uses-library android:name="com.google.android.maps" />
,我在应用程序代码中有它。.BananoutMapActivity
有趣的是:
当我在ICS模拟器上运行它时它会工作(错误出现在2. *模拟器和我的2.3.7设备上),在Honeycomb上它很可能工作,这是我猜的使用ACL的问题
当我删除implements LoaderCallbacks<ArrayList<EventItem>>
部分时,它也有效,但这样我就无法使用LoaderManager
为什么NoClassDefFoundError错误以及如何让我的MapCapableSherlockEnabledFragmentActivity中的Loaders工作?
答案 0 :(得分:19)
已弃用:我猜问题会因Google Maps Android API v2而消失。如果您决定使用弃用的v1,则解决方案如下所示。
所以杰克回答了确切的问题,但我认为对某人有一个或多或少详细的操作方法会很有用。 那么如何让ActionBarSherlock与地图配合使用?
我假设您已将ActionBarSherlock设置为库项目,您可以找到许多有关如何操作的教程。
如果您只想将MapActivity与ActionBarSherlock一起使用 - 这很简单:
如果您想将MapView与Fragcomb或Loaders等Honeycomb功能一起使用:
protected void supportInvalidateOptionsMenu()
并将其可见性更改为public
(新版ABS中不需要此步骤)<uses-library android:name="com.google.android.maps" />
放入清单文件的应用程序标记import android.support.v4.app.LoaderManager;
import android.app.LoaderManager;
{{1}} {}
这是目前最好的解决方法,直到Google将地图放入兼容性库中。我希望他们能在4个之前完成。*设备数量超过2个。* ...
答案 1 :(得分:6)
您需要使用支持库中的加载器而不是平台中的加载器。由于这些仅适用于Android 3.0+,并且您已将它们包含在类定义中这一事实将导致3.0之前的类加载器完全拒绝您的类。将导入切换到支持库变体应该是所需的全部。
如果您在Logcat中查看异常,您应该会看到一个或多个VerifyErrors,它们将具体说明问题所在。
您也只能在Android 3.2及更高版本上使用android-support-v13
库(因此名称中为v13
)。