2010-05-19 22 views
0

我建立這標誌着在地圖上的幾個點的谷歌地圖應用。我正在嘗試讓對話框在點擊標記時出現。現在,標記出現在正確的位置,但是當我點擊它們時,整個應用程序意外停止/強制關閉。有沒有人有什麼不對的建議,以及我應該如何解決它?Android的地圖應用程序強制時的地圖標記被點擊

MyMapsActivity.java類:

package net.learn2develop.MyGoogleMapsNew; 


import java.util.List; 

import android.graphics.drawable.Drawable; 
import android.os.Bundle; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.OverlayItem; 

public class MyMapsActivity extends MapActivity { 
    /** Called when the activity is first created. */ 

public MyItemOverlay itemoverlay; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     MapView mapView = (MapView) findViewById(R.id.mapview); 
     //MapView = new MapView(this, "example_Maps_ApiKey_String"); 
     mapView.setBuiltInZoomControls(true); 

     List<Overlay> mapOverlays = mapView.getOverlays(); 
     Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); 
     itemoverlay = new MyItemOverlay(drawable); 

     GeoPoint point1 = new GeoPoint(19240000,-99120000); 
     OverlayItem overlayitem1 = new OverlayItem(point1, "Hola, Mundo!", "I'm in Mexico City!"); 

     GeoPoint point2 = new GeoPoint(35410000, 139460000); 
     OverlayItem overlayitem2 = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!"); 

     GeoPoint point3 = new GeoPoint(39000000, -77000000); 
     OverlayItem overlayitem3 = new OverlayItem(point3, "",""); 


     itemoverlay.addOverlay(overlayitem1); 
     itemoverlay.addOverlay(overlayitem2); 
     itemoverlay.addOverlay(overlayitem3); 

     mapOverlays.add(itemoverlay); 

    } 

    protected boolean isRouteDisplayed() { 
     return false; 
    } 
} 

MyItemOverlay類:

package net.learn2develop.MyGoogleMapsNew; 

import java.util.ArrayList; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.graphics.drawable.Drawable; 

import com.google.android.maps.ItemizedOverlay; 
import com.google.android.maps.OverlayItem; 

public class MyItemOverlay extends ItemizedOverlay { 

private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
private Context mContext; 

public MyItemOverlay(Drawable defaultMarker) { 
    super(boundCenterBottom(defaultMarker)); 
    // TODO Auto-generated constructor stub 
} 

public MyItemOverlay(Drawable defaultMarker, Context context) { 
    super(defaultMarker); 
    mContext = context; 
} 
@Override 
protected boolean onTap(int index) { 
    OverlayItem item = mOverlays.get(index); 
    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
    dialog.setTitle(item.getTitle()); 
    dialog.setMessage(item.getSnippet()); 
    dialog.show(); 
    return true; 
} 

/* protected boolean onTap(int index) { 
     OverlayItem item = mOverlays.get(index); 
     AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
     dialog.setTitle(item.getTitle()); 
     dialog.setMessage(item.getSnippet()); 
     dialog.setPositiveButton("Yes", new OnClickListener() {  
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 
     dialog.show(); 
     return true; 
    } 
}*/ 


// @Override 
/*protected OverlayItem createItem(int arg0) { 
    // TODO Auto-generated method stub 
    return null; 
}*/ 

/*@Override 
public int size() { 
    // TODO Auto-generated method stub 
    return 0; 
}*/ 

@Override 
public int size() { 
    return mOverlays.size(); 
} 

public void addOverlay(OverlayItem overlay) { 
    mOverlays.add(overlay); 
    populate(); 
} 
@Override 
protected OverlayItem createItem(int i) { 
    return mOverlays.get(i); 
} 


} 

AndroidManifest.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="net.learn2develop.MyGoogleMapsNew" 
     android:versionCode="1" 
     android:versionName="1.0"> 
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <uses-library android:name="com.google.android.maps" /> 
     <activity android:name=".MyMapsActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 


    </application> 

    <uses-permission 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:name="android.permission.INTERNET"> 
    </uses-permission> 

    <uses-permission 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:name="android.permission.ACCESS_COARSE_LOCATION"> 
    </uses-permission> 
    <uses-sdk android:minSdkVersion="3" /> 

</manifest> 
+0

該裝置將記錄該異常事件引起了強制關閉。您可以在調試模式下查看它,或者使用logcat(adb logcat) – 2010-05-19 22:11:04

+0

感謝您回覆我.... 在調試模式下,MyMapsActivity.java中有一個斷點,位於onCreate方法的此行: itemoverlay = new MyItemOverlay(drawable); 但它並不完全明確哪裏錯了? – rachel 2010-05-19 22:32:59

+0

在Eclipse中使用'adb logcat',DDMS或DDMS透視圖來查看與崩潰相關的堆棧跟蹤。 – CommonsWare 2010-05-20 00:20:47

回答

4

變化

itemoverlay = new MyItemOverlay(drawable); 

itemoverlay = new MyItemOverlay(drawable, this); 

MyMapsActivity.java

0

在MyMapsActivity.java,您需要更改:

itemoverlay = new MyItemOverlay(drawable); 

(由鮑比·P提到),以

itemoverlay = new MyItemOverlay(drawable, this); 

AND在MyItemOverlay.java中更改第二個構造函數:

public MyItemOverlay(Drawable defaultMarker, Context context) 
{ 
    super(defaultMarker); 
    mContext = context; 
} 

到:

public MyItemOverlay(Drawable defaultMarker, Context context) 
{ 
    super(boundCenterBottom(defaultMarker)); 
    mContext = context; 
}