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