2012-05-25 67 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();