2012-05-25 68 views
1

我正在使用適用於Android的Google地圖進行項目。我創建了一個MapActivity來加載我在服務器上保存的一些地方。所以我有這個類完成活動 - Google地圖Android

public class PlaceItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

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

    public PlaceItemizedOverlay(Drawable defaultMarker, MapActivity map) { 
      super(boundCenterBottom(defaultMarker)); 
       this.macAct = map; 
    } 

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

    @Override 
    protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
    } 

    public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     populate(); 
    } 


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

    @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(); 

    this.mapAct.finish(); 

     return true; 
    } 

那麼,當我點擊一個保存的地方,程序中斷。

我創建的mapActivity對象:

PlaceItemzedOverlay itemizedoverlay = new PlaceItemizedOverlay(drawable, this); 

你能幫助我嗎?

非常感謝!

+1

後的logcat請 – skywall

+0

我已經解決了這個問題! 非常感謝! :) – Luis

+0

正如你已經解決了它,請花時間與社區分享你的解決方案,並接受它作爲答案。這樣,任何碰到同樣問題的人都不需要一遍又一遍地問同樣的問題。 :-) – Chilledrat

回答

2

的問題是在這裏//你的代碼

@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();//here you show a alert dialog on current activity 

    //this.mapAct.finish();//and here you finish current activity 

    return true; 
} 

的一部分,在這種情況下,應用程序崩潰.. 和使用

finish(); 

this.mapAct.finish(); 
+0

請發佈您的logcat輸出與每個問題,以便更好地瞭解我們的問題 –

+0

非常感謝! 我解決了這個問題:) – Luis

0

如果像你說的,你正在使用創建​​對象...

PlaceItemzedOverlay itemizedoverlay = new PlaceItemizedOverlay(drawable, this); 

...然後下面一行是無效的......

AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 

基本上你PlaceItemzedOverlay有兩個構造函數。第二個參數是Context,另一個是MapActivity。這些是mContextmapAct被設置爲有效引用並且兩者互斥的唯一兩個地方。換言之,無論使用哪個構造函數,mContextmapAct中的一個或其他將保持爲null

混合您的mContextmapAct使用您的onTap方法永遠不會去上班......

AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 

... 

this.mapAct.finish();