1

私は Android 用 Google マップでプロジェクトを行っています。サーバーに保存したいくつかの場所をロードする 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);

基本的に、 には 2 つのコンストラクターがありPlaceItemzedOverlayます。一方の 2 番目のパラメーターは aContextで、もう一方は aMapActivityです。mContextこれらは、 または のいずれかmapActが有効な参照に設定され、両方が相互に排他的である唯一の 2 つの場所です。つまり、どちらのコンストラクターを使用しても、 or のいずれmContextmapActが残りnullます。

mContextメソッドにとの使用を混在mapActさせるonTapことは決してうまくいきません...

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

...

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