2011-02-04 3 views
0

사용자가 화면에서 마커 탭을 추가 할 수있는 Android 앱을 개발 중입니다. 작동하지만, 마커 중 하나를 탭하여 제거하려고 할 때 문제가 있습니다. 여기 내 코드가 있습니다. (NooYawk 예제를 따랐습니다) :마커를 지울 수 없습니다. 탭

private class PoiOverlay extends ItemizedOverlay<MyOverlayItem>{ 
    private ArrayList<MyOverlayItem> mOverlays = new ArrayList<MyOverlayItem>(); 


    public PoiOverlay() { 
     super(null); 

     populate(); 


     // TODO Auto-generated constructor stub 
    } 




    @Override 
    protected boolean onTap(int index) { 
     Log.d("toccato",":"+index); 
     mOverlays.remove(index); 
     doPopulate(); 
     return true; 
    } 


    public boolean onTap(GeoPoint point, MapView view) { 
     if (super.onTap(point, view)) 
      return true; 
     int icon; 

      if (type==1) 
       icon=R.drawable.bluedot; 
      else 
       icon=R.drawable.reddot; 

      MyOverlayItem overlay=new MyOverlayItem(point, ""+id, ""+id, id, icon); 
      addOverlay(overlay); 
      doPopulate(); 
      Poi poi=new Poi(id, point, type); 
      pois.addLast(poi); 
      inserted.addLast(id); 

      id+=1; 
      return true; 

    } 

    public void doPopulate(){ 
     setLastFocusedIndex(-1); 
     populate(); 
    } 

    public void addOverlay(MyOverlayItem overlay){ 
     Drawable drawable=getMarker(overlay.markerInt); 
     overlay.marker=drawable; 
     mOverlays.add(overlay); 
     populate(); 
    } 

하지만 작동하지 않습니다. 마커를 추가 할 수 있지만 그 중 하나를 제거하려고하면 Array out of bounds 예외가 발생하며 그 이유는 알 수 없습니다.

이 마커를 도청 할 때 내가 가진 excpetion입니다 : 내가 슈퍼 클래스 (super.onTap(point, view))에 체인을 제거 할

02-04 22:17:29.418: ERROR/AndroidRuntime(9979): FATAL EXCEPTION: main 
    02-04 22:17:29.418: ERROR/AndroidRuntime(9979): java.lang.IndexOutOfBoundsException:  Invalid index 1, size is 1 
    02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) 
    02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at java.util.ArrayList.get(ArrayList.java:311) 
    02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.google.android.maps.ItemizedOverlay.getItem(ItemizedOverlay.java:419) 

    02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.google.android.maps.ItemizedOverlay.focus(ItemizedOverlay.java:538) 
    02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:455) 
    02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at offscreen.tagger.Main$PoiOverlay.onTap(Main.java:280) 
    02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83) 
    02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at 

com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:347) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.google.android.maps.GestureDetector.onTouchEvent(GestureDetector.java:533) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.google.android.maps.MapView.onTouchEvent(MapView.java:647) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.view.View.dispatchTouchEvent(View.java:3765) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:905) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1701) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1116) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.app.Activity.dispatchTouchEvent(Activity.java:2093) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1685) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1802) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.os.Looper.loop(Looper.java:144) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
02-04 22:17:29.418: ERROR/AndroidRuntime(9979):  at dalvik.system.NativeStart.main(Native Method) 
+0

@ user525105 : 질문하지 않았습니다. – CommonsWare

+0

@CommonsWare : 내 질문을 편집했습니다. – havanakoda

+0

@ user525105 : 스택 추적으로 질문을 편집하고 코드에 예외가 나타나는 위치를 표시하십시오. – CommonsWare

답변

0

는, 당신이 할 수있는 슈퍼 클래스를 기대하고 뭔가 특별히가없는 당신. 그건 예외가 어디에서 왔는지입니다 - 수퍼 클래스는 현재 배열보다 배열에 더 많은 항목이 있다고 생각합니다.

+0

게시 한 오류가 있습니다. 기존 오버레이 항목을 탭했는지 알기 위해 수퍼 클래스를 호출합니다. 그렇지 않으면 다른 오버레이 항목을 만듭니다. – havanakoda

+0

@ user525105 : 그러면 당신의 버그가 슈퍼 클래스에 있습니다. – CommonsWare

+0

고마워,하지만 어떻게 문제를 해결할 수 있습니까 ?? – havanakoda

관련 문제