2011-02-04 20 views
0

私はユーザーが画面上にマーカーのタップを追加できるAndroidアプリを開発しています。 それは動作しますが、マーカの1つをタップして削除したいときに問題があります。ここに私のコード(私は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(); 
    } 

しかし、それは動作しません。私はマーカーを追加することができますが、それらのうちの1つを削除しようとすると、配列外の例外が発生し、その理由がわかりません。

これは、マーカーをタップしたときに私が得たexcpetionです:

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

あなたのために行うには、スーパークラスを期待している何かが特にない限り、私は、スーパークラス(super.onTap(point, view))にチェーンを取り除くでしょう君は。それはあなたの例外がどこから来ているのかです。スーパークラスは、配列内に現在よりも多くの項目があると考えます。

+0

既存のオーバーレイアイテムをタップしたかどうかをスーパークラスと呼びます。それ以外の場合は、別のオーバーレイアイテムを作成します。 – havanakoda

+0

@ user525105:あなたのバグはあなたのスーパークラスにあります。 – CommonsWare

+0

ありがとう、しかし、私はどのように問題を解決することができますか? – havanakoda

関連する問題