Bearbeiten: Eine ausführliche Anleitung finden Sie in meiner Antwort .
Ich kämpfe jetzt seit zwei Tagen damit, hoffe, dass jemand helfen kann.
Ich versuche, den neusten ActionBarSherlock (4.0) mit einem MapView zu verwenden. Ich wusste, dass es mit Fragmenten problematisch ist, aber ich brauche sie nicht in dieser Aktivität. Aber ich brauche Loader und es scheint, dass ich auch die FragmentActivity erweitern muss, um Loader zu verwenden. Kein Problem, dachte ich, wir haben die android-support-v4-googlemaps von Pete Doyle. Wie auf vielen SO-Threads und Google Groups vorgeschlagen, baue ich das ABS mit android-support-v4-googlemaps JAR (android-support-v13-r7-googlemaps.jar) anstelle von android-support-v4.jar. Dann habe ich es als Bibliothek für mein Projekt verwendet.
Nun möchte ich meine Aktivität so haben:
public class BananoutMapActivity extends SherlockFragmentActivity implements LoaderCallbacks<ArrayList<EventItem>>{
Das Problem:
Es wird kompiliert, aber es wird ein Laufzeitfehler ausgegeben: E/AndroidRuntime(29159): java.lang.NoClassDefFoundError: ndl.klimczak.bananout.BananoutMapActivity
Dinge, die ich dreifach überprüft habe:
<uses-library android:name="com.google.android.maps" />
und ich habe es im Application-Tag. .BananoutMapActivity
in meinem Manifest deklariert Was ist interessant:
Wenn ich es auf einem ICS-Emulator ausführe, funktioniert es (der Fehler erscheint auf 2. * Emulatoren und meinem 2.3.7-Gerät), bei Honeycomb würde es wahrscheinlich funktionieren, es ist die Frage der Verwendung der ACL
Wenn ich den implements LoaderCallbacks<ArrayList<EventItem>>
Teil lösche, funktioniert es auch, aber auf diese Weise kann ich LoaderManager
Warum in aller Welt der NoClassDefFoundError-Fehler und wie bekomme ich die Loader in meiner MapCapableSherlockEnabledFragmentActivity?
Sie müssen die Loader aus der Support-Bibliothek und nicht die aus der Plattform verwenden. Da diese nur unter Android 3.0 und höher zur Verfügung stehen und die Tatsache, dass Sie sie in Ihre Klassendefinition aufgenommen haben, bewirkt, dass der Klassenloader vor Version 3.0 Ihre Klasse sofort ablehnt. Das Wechseln Ihrer Importe in die Support-Bibliothek-Varianten sollte alles sein, was dafür benötigt wird.
Wenn Sie oberhalb der Ausnahme in Logcat nachsehen, sollten Sie einen oder mehrere VerifyErrors sehen, die speziell aufzeigen, wofür das Problem aufgetreten ist.
Sie können die android-support-v13
Bibliothek auch nur auf Android 3.2 und höher verwenden (daher der v13
im Namen).
Veraltet : Ich nehme an, dass das Problem mit Google Maps Android API v2 . Wenn Sie sich für die Verwendung von veraltetem v1 entscheiden, finden Sie die Lösung unten.
Also hat Jake das genaue Problem beantwortet, aber ich dachte, dass es für jemanden nützlich wäre, eine mehr oder weniger detaillierte Anleitung zu haben. Wie kann ActionBarSherlock mit Karten arbeiten?
Ich nehme an, dass Sie ActionBarSherlock als Bibliotheksprojekt eingerichtet haben und arbeiten, Sie können viele Tutorials dazu finden.
Wenn Sie MapActivity nur mit ActionBarSherlock verwenden möchten - es ist einfach:
Wenn Sie MapView mit Honeycomb-Funktionen wie Fragmente oder Loader verwenden möchten:
protected void supportInvalidateOptionsMenu()
und ändere seine Sichtbarkeit in public
(dieser Schritt wird in der neuen Version von ABS nicht benötigt) <uses-library android:name="com.google.android.maps" />
in das Anwendungs-Tag Ihrer Manifest-Datei import android.support.v4.app.LoaderManager;
nicht von import android.app.LoaderManager;
Dies ist derzeit die beste Problemumgehung, bis Google Maps in die Kompatibilitätsbibliothek legt. Ich hoffe, sie werden es tun, bevor 4. * Geräte Nummer 2 übertreffen. * ...
Tags und Links android actionbarsherlock android-loadermanager android-maps