2011-11-23 2 views
0

지도 이동 및 제스처를 감지하고 내지도 항목에 대한 지연로드 지원을 사용하기 위해이 라이브러리로 작업하려고합니다 : http://code.google.com/p/mapview-overlay-manager/.수신기로 하위 클래스에서 새 작업 시작

overlayManager에 첨부 된지도를 설정했고 이벤트가 정상적으로 처리됩니다. 나는 경청자에게서 축배를 다만 잘 던질 수있다. 응용 프로그램 컨텍스트를 가져올 때 null이 아닙니다.

ManagedOverlay 클래스에서 인 텐트를 시작하려고했습니다. 특히 내가 의도를 시작하려고 해요 아래 onDoubleTap 방법에 나는이 오류 메시지가 얻을 :

Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 

을 나는 일반적으로 내가 다시 MapActivity 서브 클래스로 호출 할 필요는 의도를 시작하거나 이해 생각 상황에 따라 다르게해야합니다. 그러나 구체적인 사항을 다림질하는 데 어려움을 겪고 있습니다. 어떤 도움을 주셔서 감사합니다. 당신의 목적이 플래그는, 로그 캣은 너무 똑똑하다, 당신에게하시는 말씀을 이해하려고

public class SiteMapRev2 extends MapActivity { 

    private MapView mapView; 
    private OverlayManager overlayManager; 
    private MapController mapController; 
    private MyLocationOverlay userLocationOverlay; 
    private ArrayList<SiteSummary> sitesRoster = null; 
    private Drawable siteIcon; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.map); 

     mapView = (MapView) findViewById(R.id.mapview);  
     mapView.setBuiltInZoomControls(true); 

     overlayManager = new OverlayManager(this, mapView); 

     sitesRoster = new ArrayList<SiteSummary>(); 
     userLocationOverlay = new MyLocationOverlay(this, mapView); 

     mapView.getOverlays().add(userLocationOverlay); 
     mapController = mapView.getController(); 
     mapController.setZoom(14); 
     siteIcon = this.getResources().getDrawable(R.drawable.marker2); 

    } 



    @Override 
    public void onStart() { 
     super.onStart(); 
     Drawable defaultmarker = getResources().getDrawable(R.drawable.marker2); 

     ManagedOverlay managedOverlay = overlayManager.createOverlay("sites", defaultmarker); 

     managedOverlay.setOnOverlayGestureListener(new ManagedOverlayGestureDetector.OnOverlayGestureListener(){ 

      public boolean onDoubleTap(MotionEvent arg0, ManagedOverlay arg1, 
        GeoPoint arg2, ManagedOverlayItem arg3) { 

       if (arg3 == null) { 
        return false; 
       } 
       else { 
        **SiteOverlayItem thisItem = (SiteOverlayItem) arg3; 
        String siteIDAsString = Integer.toString(thisItem.getSiteID()); 
        Context c = getApplicationContext(); 
        Intent showSiteDetails = new Intent(c,SiteDetailActivity.class); 
        Log.d(toString(), "intent = " + showSiteDetails.toString()); 
        showSiteDetails.setData(Uri.parse(siteIDAsString)); 
        c.startActivity(showSiteDetails); 
        return true;** 
       } 

      } 

답변

1

대신 애플리케이션 컨텍스트를 받고, 나는 이런 짓을 했을까 :

SiteMapRev2.this.startActivity(showSiteDetails); 

지도 활동에서 정상적으로 활동을 시작합니다.

1

설정)

showSiteDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
+0

올바른 다시 탐색 스택을 잃게됩니까? 내 질문에이 점을 지적해야하지만 내 스택 시나리오를 유지하는 것은 필연적입니다. – Nick

+1

그런 다음 응용 프로그램 컨텍스트를 사용하지 말고 현재 활동의 컨텍스트를 사용하십시오. 이것이 작동하지 않으면 논리가 올바르지 않습니다. – Pawan