gpt4 book ai didi

android - 从 map 中移除 OverylayItem

转载 作者:行者123 更新时间:2023-11-29 16:11:25 25 4
gpt4 key购买 nike

我试图让用户从 map 上删除一个点(或更具体地说,一个 OverlayItem)。我关注了开发者tutorialthis 中开始并实现 CustomMapView长按 map 捕捉教程。

所以现在我有了一个允许用户在 map 上放置点的程序。我的下一个目标是让用户删除积分。这是我在用户单击 map 上现有点时的代码。

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();
}

单击现有点后,会出现一个对话框,提供删除该点的功能。当我选择删除该点时,该点仍保留在屏幕上。如果我放置一个新点,“已删除”的点将被删除。但是,如果我单击“已删除”点或另一个现有点,程序会因此错误而崩溃。

error

如果您知道该怎么做,我很高兴收到您的来信!!

编辑

根据 Vishwa Patel 的提示,我立即使用 postInvalidate() 从 map 上删除了一个点。但是,当我单击图标所在的位置时,我仍然会遇到 indexoutofbounds 异常。

最佳答案

您可能需要在 MapView 上调用 invalidate(),强制它重新绘制自己。正如评论者提到的,您可能还需要重新调用 populate()。您的应用可能正在崩溃,因为它正在尝试为不存在的 OverlayItem 调用 onTap()。您可能还想尝试任何可以“刷新”MapView 和/或 Overlay 的方法,因为您需要这样做才能使 OverlayItem 消失。

关于android - 从 map 中移除 OverylayItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com