Android 在对话框中添加标记时不显示标记单击
当用户单击地图时,我试图在地图上添加一个标记,Android 在对话框中添加标记时不显示标记单击,android,google-maps-markers,itemizedoverlay,customdialog,Android,Google Maps Markers,Itemizedoverlay,Customdialog,当用户单击地图时,我试图在地图上添加一个标记, 当我在onTouchEvent中添加选项卡式位置标记时,地图会在选项卡式位置显示相应的标记(标题和片段的值是硬编码的)。 但是,问题是,当我想从用户那里获取title和snippet的值时,我创建了一个自定义提示对话框来输入详细信息。 在按钮的onclick事件处理程序中放入addOverlay()时,相应的标记未显示。 *使用AVD 以下代码工作正常 public class MarkerOverlay extends ItemizedO
当我在onTouchEvent中添加选项卡式位置标记时,地图会在选项卡式位置显示相应的标记(标题和片段的值是硬编码的)。
但是,问题是,当我想从用户那里获取title和snippet的值时,我创建了一个自定义提示对话框来输入详细信息。
在按钮的onclick事件处理程序中放入addOverlay()时,相应的标记未显示。
*使用AVD 以下代码工作正常
public class MarkerOverlay extends ItemizedOverlay {
private ArrayList<OverlayItem> locationOverlayItems = new ArrayList<OverlayItem>();
private Context locationContext;
private OverlayItem tabbedLocation;
private AlertDialog promptDialog;
private LayoutInflater inflater;
private TextView info;
private EditText title;
private EditText description;
public MarkerOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
locationContext = context;
}
public void addOverlay(OverlayItem overlay) {
locationOverlayItems.add(overlay);
populate();
}
public void removeOverLay(OverlayItem overlay){
locationOverlayItems.remove(overlay);
populate();
}
@Override
protected OverlayItem createItem(int arg0) {
return locationOverlayItems.get(arg0);
}
@Override
public int size() {
return locationOverlayItems.size();
}
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
if (event.getAction() == 1) {
int x = (int) event.getX();
int y = (int) event.getY();
final GeoPoint geoPoint = mapView.getProjection().fromPixels(x, y);
tabbedLocation = new OverlayItem(geoPoint, "title","description");
addOverlay(tabbedLocation);
return false;
}
}
}
请帮助解决提前感谢最后,我用一种稍有不同的方法通过以下代码完成了这项工作,并提供了一些其他功能,例如在移动地图时禁用对话框
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
if(!moveMap){
int x = (int) event.getX();
int y = (int) event.getY();
geoPoint = mapView.getProjection().fromPixels(x, y);
final Dialog dialog = new Dialog(locationContext);
dialog.setContentView(R.layout.marker_prompt);
dialog.setTitle("Add Marker");
info = (TextView) dialog.findViewById(R.id.info);
info.setText(geoPoint.getLatitudeE6() / 1E6 + ","
+ geoPoint.getLongitudeE6() / 1E6);
title = (EditText) dialog.findViewById(R.id.title_text);
description = (EditText) dialog
.findViewById(R.id.description_text);
Button addButton = (Button) dialog.findViewById(R.id.add);
Button cancelButton = (Button) dialog.findViewById(R.id.cancel);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!title.getText().toString().equals("")
&& !description.getText().toString()
.equals("")) {
titleString = title.getText().toString();
snippetString = description.getText().toString();
tabbedLocation = new OverlayItem(geoPoint, titleString, snippetString);
addOverlay(tabbedLocation);
// Log.d(titleString, snippetString);
dialog.dismiss();
LocationApplication.getInstance(
locationContext).saveMarker(
geoPoint, tabbedLocation);
}
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
} else if (action == MotionEvent.ACTION_DOWN) {
moveMap = false;
} else if (action == MotionEvent.ACTION_MOVE) {
moveMap = true;
}
return false;
}
在这里,我使用的是Dialog而不是alert Dialog,setContentView()
而不是充气布局。我仍然不清楚为什么以前的方法不起作用
不管怎样,谢谢大家刚才看了这个问题:p
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
if(!moveMap){
int x = (int) event.getX();
int y = (int) event.getY();
geoPoint = mapView.getProjection().fromPixels(x, y);
final Dialog dialog = new Dialog(locationContext);
dialog.setContentView(R.layout.marker_prompt);
dialog.setTitle("Add Marker");
info = (TextView) dialog.findViewById(R.id.info);
info.setText(geoPoint.getLatitudeE6() / 1E6 + ","
+ geoPoint.getLongitudeE6() / 1E6);
title = (EditText) dialog.findViewById(R.id.title_text);
description = (EditText) dialog
.findViewById(R.id.description_text);
Button addButton = (Button) dialog.findViewById(R.id.add);
Button cancelButton = (Button) dialog.findViewById(R.id.cancel);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!title.getText().toString().equals("")
&& !description.getText().toString()
.equals("")) {
titleString = title.getText().toString();
snippetString = description.getText().toString();
tabbedLocation = new OverlayItem(geoPoint, titleString, snippetString);
addOverlay(tabbedLocation);
// Log.d(titleString, snippetString);
dialog.dismiss();
LocationApplication.getInstance(
locationContext).saveMarker(
geoPoint, tabbedLocation);
}
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
} else if (action == MotionEvent.ACTION_DOWN) {
moveMap = false;
} else if (action == MotionEvent.ACTION_MOVE) {
moveMap = true;
}
return false;
}