Начало новой деятельности из подкласса со слушателем - PullRequest
0 голосов
/ 23 ноября 2011

Чтобы определить движения и жесты карты и использовать поддержку отложенной загрузки для элементов моей карты, я пытаюсь работать с этой библиотекой: http://code.google.com/p/mapview-overlay-manager/.

Я установил карту, прикрепленную к overlayManager, и события проходят очень хорошо. Я могу просто бросить тост от слушателя. Когда я получаю контекст приложения, он не равен нулю.

Я застрял, пытаясь запустить намерение из класса 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;**
                }

            }

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Вместо того, чтобы получить контекст приложения, я бы сделал это:

SiteMapRev2.this.startActivity(showSiteDetails);

, который начинает действие с вашей активности на карте, как обычно.

1 голос
/ 23 ноября 2011

Установите этот флаг на свое усмотрение, Logcat слишком умен, попытайтесь понять, что вам говорят;)

showSiteDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
...