繁体   English   中英

如何从Android中的另一个活动调用MapActivity的方法?

[英]How to call a method of the MapActivity from another activity in Android?

我正在使用基于Google Maps API的Android应用程序。 我有一个refresh()方法来刷新MapActivity 在我从其他活动管理POI后,我想调用refresh()方法刷新地图。

MapActivity.refresh();

这是我的refresh()方法:

public void refresh() {
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}

我知道如果它是static我可以从其他活动中调用此方法。 因此,我进行了以下更改:

public static void refresh() {
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}

之后,我收到此消息:

Non-static method 'getIntent()' cannot be referenced from a static context

还有另一种刷新地图的方法吗?

阅读有用的注释后,我做了以下mapReset()方法:

public void mapReset() {
    map.clear();
    addAllMarkers();
    //...
}

我将此方法添加到ChildEventListener并且在管理POI之后将重置地图。 这解决了我的问题。

poiFirebase.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        //...
        mapReset();
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        //...
        mapReset();
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {
        //...
        mapReset();
    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        //...
        mapReset();
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
        //...
    }
});

静态方法只定义一次 ,并且与类实例无关。 因此,您无法使用它修改类实例。 您可以做的是将MapActivity作为静态成员存储在类中,例如:

public class World {
    public static MapActivity myMap;
    ...
}

然后,您可以像这样访问地图:

World.myMap.refresh();

区别在于您将整个MapActivity视为静态成员,但是一旦调用World.myMap ,便有了一个类实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM