1

我正在使用 Google Maps for Android 做一个项目。我创建了一个 MapActivity 来加载我保存在服务器上的一些地方。所以我有这门课

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

你能帮我吗?

非常感谢!

4

2 回答 2

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();
于 2012-05-26T06:44:00.393 回答
0

如您所说,如果您正在itemizedoverlay使用...创建对象

PlaceItemzedOverlay itemizedoverlay = new PlaceItemizedOverlay(drawable, this);

...那么以下行无效...

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

基本上你有两个PlaceItemzedOverlay. 一个的第二个参数是 a Context,另一个是 a MapActivity。这是仅有的两个地方,其中一个mContextmapAct设置为一个有效的引用,并且两者都是互斥的。换句话说,无论使用哪个构造函数,都将保留mContextor中的一个或另一个。mapActnull

在你的方法中混合你的使用mContextmapAct你的onTap方法永远不会奏效......

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

...

this.mapAct.finish();
于 2012-05-25T17:45:01.867 回答