如何从 Android 上的回调方法访问变量

How can I access variable from a callback method on Android

我有一个名为 MapViewManager 的 class,其中有一个名为 navigate 的方法,如下所示:

public class MapViewManager{
    ...
    public void navigate(double startX, double startY, double toX, double toY, long floorId, boolean flag) {
        final FeatureLayer featureLayer = new FeatureLayer("navigate");
        mapView.setLayerOffset(featureLayer);
        mapView.addLayer(featureLayer);

        final NavigateManager navigateManager = new NavigateManager();
        if (flag) {
            navigateManager.navigation(startX, startY, floorId, toX, toY, floorId);
        }else{
            navigateManager.clear();
        }

        navigateManager.setOnNavigateComplete(new NavigateManager.OnNavigateComplete() {
            @Override
            public void onNavigateComplete(NavigateManager.NavigateState navigateState,
                                       FeatureCollection featureCollection) {
                featureLayer.clearFeatures();
                featureLayer.addFeatures(featureCollection);

                for (int i=0;i<featureCollection.getSize();i++){
                    Feature feature = featureCollection.getFeature(i);
                    Coordinate coordinate = feature.getCentroid();
                    double x = coordinate.getX();
                    double y = coordinate.getY();   
                }
            }
        });
    }
}

我想从外部访问 onNavigateComplete 回调方法中名为 coordinate 的变量,以便其他 classes 可以使用 coordinate 变量做一些事情。我怎样才能做到?

您必须 public 这样做:

说你的 activity 名字是 'Main'

    ....
Public class Main extends AppCompatActivity{

Coordinate coor; 

//in the onNavigationComplete method do this

Coordinate coordinate = //..complete this;
coor = coordinate; 
…
…}

导航方法再添加一个参数。

public class MapViewManager{
    ...
    public void navigate(double startX, double startY, double toX, double toY, long floorId, boolean flag, NavigateManager.OnNavigateComplete navigation) {
        final FeatureLayer featureLayer = new FeatureLayer("navigate");
        mapView.setLayerOffset(featureLayer);
        mapView.addLayer(featureLayer);

        final NavigateManager navigateManager = new NavigateManager();
        if (flag) {
            navigateManager.navigation(startX, startY, floorId, toX, toY, floorId);
        }else{
            navigateManager.clear();
        }

        navigateManager.setOnNavigateComplete(navigation);
    }
}

调用其他方法 Class :

new MapViewManager().navigate(other paramter values, new NavigateManager.OnNavigateComplete() {
            @Override
            public void onNavigateComplete(NavigateManager.NavigateState navigateState,
                                       FeatureCollection featureCollection) {
                featureLayer.clearFeatures();
                featureLayer.addFeatures(featureCollection);

                for (int i=0;i<featureCollection.getSize();i++){
                    Feature feature = featureCollection.getFeature(i);
                    Coordinate coordinate = feature.getCentroid();
                    navigationPoints.add(coordinate);
                    double x = coordinate.getX();
                    double y = coordinate.getY();   
                }
            }
        });

现在您可以随时随地访问任何对象。