ItemizedOverlay 클래스를 이용해서 구글맵에 터치시 마커 생성하는거 만들고 있습니다. 


처음 실행시 구글맵이 나오고 지도의 아무곳이나 터치 하면 바로 마커가 생성되는 프로그램인데 

구글맵 터치하면 erroexception 나와서 강제 종료되고 


이상하게 onCreate에 overlayItem을  하나를 등록시켜 놓고 실행하면 구글맵 터치시 마커가 잘 생성됩니다.

그러니까 이 경우에는 전과는 다르게 처음 실행하자마자  지도에 마커 하나가 표시되어 있고 그 후에 맵을 터치하면 

잘 생성이 됩니다. 


public class HelloMaps extends MapActivity {

private MyItemizedOverlay mItemizedOverlay;

private MyLocationOverlay mLocationOverlay;

private MapView mv;

    

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        mv = (MapView)findViewById(R.id.map);

        mv.setBuiltInZoomControls(true);

        initLocationOverlay();

        initItemizedOverlay();


//바로 이 코드를 추가시켜 놓으면 터치시 마커가 잘 생성되고 아니면 맵 터치시 종료됩니다.ㅠ 

        addOverlayItem(37422006, -122084095, "Googleplex", "Google HQ");

//하지만 저는 이렇게 마커를 생성해 놓는 것 보다 제가 터치한 장소에 바로 마커를 표시하려고 합니다.    

}

private void initItemizedOverlay(){

Drawable marker = getResources().getDrawable(R.drawable.marker);

        marker.setBounds(0, 0,

        marker.getIntrinsicWidth(), 

        marker.getIntrinsicHeight() );

        

        mItemizedOverlay = new MyItemizedOverlay(marker);

        

        mv.getOverlays().add(mItemizedOverlay);

}

private void addOverlayItem(int latitudeE6, int longitudeE6, String title, String snippet){

mItemizedOverlay.addItem(

new OverlayItem(new GeoPoint(latitudeE6, longitudeE6), 

title, snippet));

}

private void initLocationOverlay(){

mLocationOverlay = new MyLocationOverlay(this, mv);

        mLocationOverlay.enableMyLocation();

mv.getOverlays().add(mLocationOverlay);

}


@Override

protected boolean isRouteDisplayed() {

return false;

}

}


// ItemizedOverlay 클래스입니다.

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

private List<OverlayItem> items = new ArrayList<OverlayItem>();

private Drawable marker = null;

private MapController mapController = null;

public MyItemizedOverlay(Drawable marker){

super(marker);

this.marker = marker;

}


..... 생략 .....

public void addItem(OverlayItem item){

items.add(item);

populate();

}

@Override

public boolean onTap(GeoPoint p, MapView v){

if(mapController == null)

mapController = v.getController();

mapController.animateTo(p);


// 이부분은 맵을 터치시 GeoPoint로 위치를 받아서 지도에 표시하는 부분입니다.

OverlayItem overlayItem = new OverlayItem(new GeoPoint(p.getLatitudeE6(), p.getLongitudeE6()), "", "");

items.add(overlayItem);

populate();

return true;

}


}


설명이 잘 되었는지 모르겠습니다. 꼭 조언 부탁드립니다. 어려운건 아닌거 같은데 제가 많이 모르는 것 같습니다.

답변 기다리겠습니다. 감사합니다.!