0

사용자가지도를 클릭하면지도에 마커를 추가하려고합니다.
onTouchEvent 내에서 탭 마커를 추가하면 해당 마커 탭이있는 위치에서 (제목과 스 니펫의 값은 하드 코딩 됨).
그러나 문제는 사용자의 제목과 스 니펫 값을 가져 오려면 세부 정보를 입력하라는 사용자 지정 프롬프트 대화 상자를 만들었습니다.
버튼의 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; } } } 

이 예상 된 결과를 제공하지 않습니다 잘 작동

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

      inflater = LayoutInflater.from(locationContext); 
      View prompt = inflater.inflate(R.layout.marker_prompt, null); 

      info = (TextView) prompt.findViewById(R.id.info); 
      info.setText(geoPoint.getLatitudeE6()/1E6 + "," + geoPoint.getLongitudeE6()/1E6); 

      title = (EditText) prompt.findViewById(R.id.title_text); 
      description = (EditText) prompt.findViewById(R.id.description_text); 

      promptDialog = new AlertDialog.Builder(locationContext) 
      .setView(prompt) 
      .setTitle("Add marker") 
      .setMessage("Specify the details") 
      .setPositiveButton("Add", new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        if(!title.getText().toString().equals("") && !description.getText().toString().equals("")){ 
         tabbedLocation = new OverlayItem(geoPoint, title.getText().toString(), 
           description.getText().toString());      
         addOverlay(tabbedLocation); 
        } 
       } 
      }) 
      .setNegativeButton("Cancel", new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        promptDialog.cancel(); 
       } 
      }).create(); 
      promptDialog.show();     
     } 
     return false; 
    } 

사전에
감사를 해결하기 위해 도와주세요

답변

0

마지막으로 맵을 이동하는 동안 대화 상자를 비활성화하는 등의 기능을 추가하여 약간 다른 접근 방식으로 다음 코드를 완료했습니다.

@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; 
    } 
다음

내가 대화 대신 경고 대화 상자를 사용하고, setContentView() 대신 레이아웃을 부풀려. 여전히 이전 접근 방식이 효과가 없었던 이유는 분명하지 않습니다.

어쨌든이 질문을 보았던 모든 분들께 감사드립니다. P