Hi Treking, thanks for your reply.BalloonItemizedOverlay is a class which extends BalloonItemizedOverlay.
this is the BalloonItemizedOverlay implementation public abstract class BalloonItemizedOverlay<Item> extends ItemizedOverlay<OverlayItem> { private MapView mapView; private BalloonOverlayView balloonView; private View clickRegion; private int viewOffset; final MapController mc; private int id; /** * Create a new BalloonItemizedOverlay * * @param defaultMarker * - A bounded Drawable to be drawn on the map for each item in * the overlay. * @param mapView * - The view upon which the overlay items are to be drawn. */ public BalloonItemizedOverlay(Drawable defaultMarker, MapView mapView) { super(defaultMarker); this.mapView = mapView; viewOffset = 0; mc = mapView.getController(); } /** * Set the horizontal distance between the marker and the bottom of the * information balloon. The default is 0 which works well for center bounded * markers. If your marker is center-bottom bounded, call this before adding * overlay items to ensure the balloon hovers exactly above the marker. * * @param pixels * - The padding between the center point and the bottom of the * information balloon. */ public void setBalloonBottomOffset(int pixels) { viewOffset = pixels; } /** * Override this method to handle a "tap" on a balloon. By default, does * nothing and returns false. * * @param index * - The index of the item whose balloon is tapped. * @return true if you handled the tap, otherwise false. */ protected boolean onBalloonTap(int index) { id = index; Toast.makeText(mapView.getContext(), "IDDD " + index, Toast.LENGTH_LONG).show(); return false; } /* * (non-Javadoc) * * @see com.google.android.maps.ItemizedOverlay#onTap(int) */ @Override protected final boolean onTap(int index) { boolean isRecycled; final int thisIndex; GeoPoint point; thisIndex = index; point = createItem(index).getPoint(); if (balloonView == null) { balloonView = new BalloonOverlayView(mapView.getContext(), viewOffset); clickRegion = (View) balloonView .findViewById(R.id.balloon_inner_layout); isRecycled = false; } else { isRecycled = true; } balloonView.setVisibility(View.GONE); List<Overlay> mapOverlays = mapView.getOverlays(); if (mapOverlays.size() > 1) { hideOtherBalloons(mapOverlays); } balloonView.setData(createItem(index)); MapView.LayoutParams params = new MapView.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, point, MapView.LayoutParams.BOTTOM_CENTER); params.mode = MapView.LayoutParams.MODE_MAP; setBalloonTouchListener(thisIndex); balloonView.setVisibility(View.VISIBLE); if (isRecycled) { balloonView.setLayoutParams(params); } else { mapView.addView(balloonView, params); } mc.animateTo(point); /*Toast.makeText(mapView.getContext(), "indexdss " + index, Toast.LENGTH_LONG).show();*/ return true; } /** * Sets the visibility of this overlay's balloon view to GONE. */ private void hideBalloon() { if (balloonView != null) { balloonView.setVisibility(View.GONE); } } /** * Hides the balloon view for any other BalloonItemizedOverlay instances * that might be present on the MapView. * * @param overlays * - list of overlays (including this) on the MapView. */ private void hideOtherBalloons(List<Overlay> overlays) { for (Overlay overlay : overlays) { if (overlay instanceof BalloonItemizedOverlay<?> && overlay != this) { ((BalloonItemizedOverlay<?>) overlay).hideBalloon(); } } } /** * Sets the onTouchListener for the balloon being displayed, calling the * overridden onBalloonTap if implemented. * * @param thisIndex * - The index of the item whose balloon is tapped. */ private void setBalloonTouchListener(final int thisIndex) { try { @SuppressWarnings("unused") Method m = this.getClass().getDeclaredMethod("onBalloonTap", int.class); clickRegion.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { View l = ((View) v.getParent()) .findViewById(R.id.balloon_main_layout); Drawable d = l.getBackground(); if (event.getAction() == MotionEvent.ACTION_DOWN) { int[] states = { android.R.attr.state_pressed }; if (d.setState(states)) { d.invalidateSelf(); } return true; } else if (event.getAction() == MotionEvent.ACTION_UP) { int newStates[] = {}; if (d.setState(newStates)) { d.invalidateSelf(); } // call overridden method onBalloonTap(thisIndex); NearestLocation near = MapInfo.nearestArray[thisIndex]; /*Toast.makeText(mapView.getContext(), "index Touch :- " + near.getPartname() + thisIndex, Toast.LENGTH_LONG).show();*/ return true; } else { return false; } } }); } catch (SecurityException e) { Log.e("BalloonItemizedOverlay", "setBalloonTouchListener reflection SecurityException"); return; } catch (NoSuchMethodException e) { // method not overridden - do nothing return; } } } but why it's always giving the index of 0? regards, Mike -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en