Problem med MapActivity inuti TabSpec

Diskussion i 'Frågor, support och diskussion' startad av cellyboy, 27 aug 2009.

  1. cellyboy

    cellyboy Infant Droid Medlem

    Blev medlem:
    10 aug 2009
    Inlägg:
    5
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej, har nu suttit och nött på ett problem jag stött på rörande att ha en MapActivity uniti en TabSpec skapad av en TabActivity, kort och gott har mitt program ett antal tabbar, för närvarande tre stycken tabbar som innehåller TextViews, inget komplicerat, visar lite informativ text. Problemet kommer dock i spel när jag försöker att skapa en MapActivity och sätta in den i en av tabbarna.

    Kod:
    package celly.android.hellotabwidget;
    
    import android.app.TabActivity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TabHost;
    
    public class HelloTabWidget extends TabActivity {
    	
    	private TabHost mTabHost;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
        	super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            mTabHost = getTabHost();
            Context ctx = this.getApplicationContext();
            mTabHost.addTab(mTabHost.newTabSpec("GOTO_TAB").setIndicator("GOTO").setContent(R.id.textview1));
            Intent i = new Intent(ctx, MapTab.class);
            mTabHost.addTab(mTabHost.newTabSpec("MAP_TAB").setIndicator("MAP").setContent(i));
            mTabHost.addTab(mTabHost.newTabSpec("LOGS_TAB").setIndicator("LOGS").setContent(R.id.textview4));
            i = new Intent(ctx, GpsTab.class);
            mTabHost.addTab(mTabHost.newTabSpec("GPS_TAB").setIndicator("GPS").setContent(i));
            
           
            mTabHost.setCurrentTab(0);
        }
    }
    Detta är Main activityn som är en TabActivity.

    Bortse från det löjliga namnet HelloTabWidget, jag har utgått från developer-tutorialen på developer.android.com rörande TabActivities.

    Kod:
    package celly.android.hellotabwidget;
    
    import android.os.Bundle;
    import android.widget.LinearLayout;
    import android.widget.ZoomControls;
    import com.google.android.maps.MapActivity;
    import com.google.android.maps.MapView;
    
    public class MapTab extends MapActivity {
    
    	private LinearLayout linearLayout;
    	private MapView mapView;
    	private ZoomControls mZoom;
    	
    	@Override
    	public void onCreate(Bundle icicle) {
    		// TODO Auto-generated method stub
    		super.onCreate(icicle);
    		setContentView(R.layout.maplayout);
    		linearLayout = (LinearLayout) findViewById(R.id.zoomview);
    		mapView = (MapView) findViewById(R.id.mapview);
    		mZoom = (ZoomControls) mapView.getZoomControls();
    		linearLayout.addView(mZoom);
    	}
    
    	@Override
    	public boolean isRouteDisplayed() {
    		// TODO Auto-generated method stub
    		return false;
    	}
    }
    
    Detta är aktiviteten som ska startas i den tab som ämnar innehålla en karta. Bortse även i denna aktiviteten från att getZoomControls(); är deprecated, detta ska ändras vid senare tillfälle.

    Nedan är de relevanta delarna av stacktracen:

    Kod:
    W/dalvikvm(  820): Class resolved by unexpected DEX: Lcelly/android/hellotabwidg
    et/MapTab;(0x437357d0):0x190d00 ref [Lcom/google/android/maps/MapActivity;] Lcom
    /google/android/maps/MapActivity;(0x437357d0):0x186d38
    W/dalvikvm(  820): Unable to resolve superclass of Lcelly/android/hellotabwidget/MapTab; (52)
    W/dalvikvm(  820): Link of class 'Lcelly/android/hellotabwidget/MapTab;' failed
    D/AndroidRuntime(  820): Shutting down VM
    W/dalvikvm(  820): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
    E/AndroidRuntime(  820): Uncaught handler: thread main exiting due to uncaught exception
    E/AndroidRuntime(  820): java.lang.NoClassDefFoundError: celly.android.hellotabwidget.MapTab
    E/AndroidRuntime(  820):        at celly.android.hellotabwidget.HelloTabWidget.onCreate(HelloTabWidget.java:22)
    E/AndroidRuntime(  820):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
    E/AndroidRuntime(  820):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
    E/AndroidRuntime(  820):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
    E/AndroidRuntime(  820):        at android.app.ActivityThread.access$1800(ActivityThread.java:112)
    E/AndroidRuntime(  820):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
    E/AndroidRuntime(  820):        at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(  820):        at android.os.Looper.loop(Looper.java:123)
    E/AndroidRuntime(  820):        at android.app.ActivityThread.main(ActivityThread.java:3948)
    E/AndroidRuntime(  820):        at java.lang.reflect.Method.invokeNative(NativeMethod)
    E/AndroidRuntime(  820):        at java.lang.reflect.Method.invoke(Method.java:521)
    E/AndroidRuntime(  820):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
    E/AndroidRuntime(  820):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
    E/AndroidRuntime(  820):        at dalvik.system.NativeStart.main(Native Method)
    E/AndroidRuntime(  820): Caused by: java.lang.IllegalAccessError: cross-loader access from pre-verified class
    E/AndroidRuntime(  820):        at dalvik.system.DexFile.defineClass(NativeMethod)
    E/AndroidRuntime(  820):        at dalvik.system.DexFile.loadClass(DexFile.java:193)
    E/AndroidRuntime(  820):        at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:203)
    E/AndroidRuntime(  820):        at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
    E/AndroidRuntime(  820):        at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
    E/AndroidRuntime(  820):        ... 14 more
    I/Process (  567): Sending signal. PID: 820 SIG: 3
    I/dalvikvm(  820): threadid=7: reacting to signal 3
    I/dalvikvm(  820): Wrote stack trace to '/data/anr/traces.txt'
    Rad 22, som hänvisas till i:

    Kod:
    E/AndroidRuntime(  820): java.lang.NoClassDefFoundError: celly.android.hellotabwidget.MapTab
    E/AndroidRuntime(  820):        at celly.android.hellotabwidget.HelloTabWidget.onCreate(HelloTabWidget.java:22)
    är denna rad ur koden i HelloTabWidget.java

    Kod:
    Intent i = new Intent(ctx, MapTab.class);
    Om programmet körs i sin nuvarande skepnad fås en FC direkt vid runtime.

    Om raden nedan tas bort ur manifestet körs programmet och fungerar till dess en FC uppstår om MAP taben klickas.:

    uses-library android:name="com.google.android.maps"

    Om all kod rörande karta inuti en tab tas bort fungerar programmet tillfredsställande och övriga tabbar fungerar som ämnat. Dock givetvis utan Map.

    Vet någon vad problemet kan vara? Har googlat på saken, fick upp en guide om hur man använder MapActivity inuti Tabs, det är samma metod, och har även försökt kopiera det exemplet, men ingen framgång.

    Tack på förhand // celly

    PS. kan man inte innesluta manifestet i code-taggar? :s all text försvann bara... lite svårt att visa upp manifestet då...