2011-01-14 4 views
0

내 애플리케이션에서 선택한 긴 클릭 포인트의 좌표를 사용하고 옵션 집합을 표시하는 MapView의 상황에 맞는 메뉴를 구현해야합니다. 상황에 맞는 메뉴의 MapActivity를 등록한 다음 oncreatecontextmenu 메서드를 재정의하려고 시도했지만 longclick 이벤트가 발생하지 않는 것 같습니다. (예 : DDL에 표시되지 않는 oncreatecontextmenu 메소드에 일부 로그를 입력하십시오.)MapView 또는 다른 솔루션의 상황에 맞는 메뉴

웹 및 Android 설명서에서 검색했지만 만족스럽지 않습니다. MapView에서 컨텍스트 메뉴를 만드는 것이 정말 불가능합니까? 그렇다면 비슷한 것을 구현하는 방법이 있습니까? 다음을 시도 발생하지 않습니다

public class ChoosePosition extends MapActivity { 
MapView mappa; 
MapController mapCtr; 

LocationManager locManager; 
LocationListener locLstn; 
Location myLastLoc; 
String locProvider; 

double mylat, mylongi; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.chooseposition); 


    locManager = (LocationManager)getSystemService(LOCATION_SERVICE); 



    locLstn = new MyLocationListener(); 


    locManager.requestLocationUpdates(
    LocationManager.GPS_PROVIDER, 
    2000, 10, 
    locLstn); 

    mappa = (MapView) findViewById(R.id.map2); 
    mappa.setLongClickable(true); 

    mapCtr = mappa.getController(); 

    // attiviamo lo zoom integrato 
    mappa.setBuiltInZoomControls(true); 

// getting last known location 
    myLastLoc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    GeoPoint point; 
    if (myLastLoc == null) { 
     mylat = myLastLoc.getLatitude(); 
     mylongi = myLastLoc.getLongitude(); 
     // trasformiamo l'ultima posizione in un GeoPoint 
     point= new GeoPoint((int) (myLastLoc.getLatitude() * 1E6), 
       (int) (myLastLoc.getLongitude() * 1E6)); 

    } 


    // setting center and zoom 
    mapCtr.setCenter(point); 
    mapCtr.setZoom(17); 



    // adding an overlay 
    MyLocationOverlay myLocationOverlay = new MyLocationOverlay(); 
    mappa.getOverlays().add(myLocationOverlay); 

     registerForContextMenu(mappa); 


} 



@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
      Log.i("MYINFO", "I'm in"); 
    menu.add(Menu.NONE, 0, Menu.NONE, "First option"); 

} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    return true; 
    } 

답변

3

긴 클릭 이벤트로 : 은 내가 (단순) 코드를 게시하도록하겠습니다.

자신의 오버레이 클래스를 작성하고 onTab() 메소드를 재정의하십시오. 이 메서드 내에서 openContextMenu() 메서드를 호출합니다. 지도를 탭하면 컨텍스트 메뉴가 열립니다.

+0

"onTab"은 "onTap"을 의미합니다.) ok, onTap 대신 onTouchEvent 메서드를 포인터가 움직이는 지 여부를 나타내는 플래그로 재정의했습니다. 그렇지 않다면 ACTION_UP 이벤트가 ACTION_DOWN 이벤트 이후 1 초인 경우 openContextMenu 메서드를 호출했습니다. – breathe0

+0

그래서 고마워요! – breathe0

+0

당신을 환영합니다! 예, 당연히 제가 의미하는 것입니다()! ;) – Flo