Я пытаюсь разрешить пользователю удалить точку (или, точнее, OverlayItem) с карты. Я следил за учебником для разработчиков, чтобы начать работу, и внедрил CustomMapView в < href="http://www.kind-kristiansen.no/2011/android-handling-longpresslongclick-on-map-revisited/" rel="nofollow noreferrer">это руководство по захвату длительного нажатия на карта.
Итак, теперь у меня есть программа, которая позволяет пользователю размещать точки на карте. Моя следующая цель — позволить пользователю удалять баллы. Вот мой код, когда пользователь щелкает существующую точку на карте.
public class OurItemizedOverlay extends ItemizedOverlay {
//Create new list of points
private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
private Context mapContext;
@Override
protected boolean onTap(final int index) {
Button edit, remove;
//Get index of item tapped
OverlayItem item = mapOverlays.get(index);
//Create Dialog to show point info, allow for edit or removal.
LinearLayout layout = new LinearLayout(mapContext);
layout.setOrientation(LinearLayout.VERTICAL);
LayoutInflater inflater = LayoutInflater.from(mapContext);
AlertDialog.Builder builder = new AlertDialog.Builder(mapContext);
builder.setTitle(item.getTitle());
builder.setMessage(item.getSnippet());
View view = inflater.inflate(R.layout.view_or_edit_location_dialog, null);
builder.setView(view);
builder.show();
//BUTTONS
edit = (Button)view.findViewById(R.id.edit);
remove = (Button)view.findViewById(R.id.delete);
//Edit Button Listener
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
//Remove Button Listener
remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeOverlay(index); <--------
Log.d("View location info", "user clicked delete.");
return;
}
});
return true;
}
Вот мой код для removeOverlay.
protected void removeOverlay(int index) {
mapOverlays.remove(index);
com.example.mapproject.MainActivity.mapView.invalidate();
}
После того, как я нажму на существующую точку, появится диалоговое окно, предлагающее удалить точку. Когда я выбрал удаление точки, она по-прежнему остается на экране. Если я поставлю новую точку, «удаленная» будет удалена. Однако, если я нажму на «удаленную» точку или другую существующую точку, программа вылетит с этой ошибкой.
Если у вас есть ключ к тому, что делать, я был бы признателен за известие от вас !!
Изменить
Следуя совету Вишвы Пателя, я сразу удаляю точку с карты с помощью функции postInvalidate(). Тем не менее, я все еще получаю исключения indexoutofbounds, когда я нажимаю, где был значок.
com.example.mapproject.MainActivity.mapView.invalidate();
попробуйте сv.invalidate ()
вonClick(View v)....
- person tozka   schedule 17.10.2012populate()
? По сути, ItemizedOverlay предназначен для предварительного кэширования. Если вы обновляете набор данных, должен быть способ переделать все кеши. Populate вызывается при первом создании этой структуры. Если его нельзя вызывать несколько раз для одного и того же объекта, вы можете сделать несколько вещей. Создайте новое состояние для drawable и просто деактивируйте его (невидимый и игнорируйте попадания), или вы можете воссоздать весь ItemizedOverlay и добавить его в коллекцию наложений MapView. - person Greg Giacovelli   schedule 17.10.2012