2016-12-20 2 views
0

Zugriff habe ich eine Klasse mit dem Namen MapViewManager, darin habe ich eine Methode navigieren genannt wie unten:Wie kann ich Variablen aus einer Callback-Methode auf Android

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(); 
       } 
      } 
     }); 
    } 
} 

ich die Variable in onNavigateComplete Callback-Koordinate genannt zugreifen möchten Methode von außen, so dass andere Klassen die Koordinatenvariable verwenden können, um etwas zu tun. Wie kann ich es schaffen?

+0

"Koordinatenkoordinaten" außerhalb deklarieren und am besten ist 'Koordinaten' bezogenen Code innerhalb' onNavigateComplete' –

+0

Ich brauche alle Koordinatenvariablen, so dass ich eine Array-Liste außerhalb und innerhalb von ich jede Koordinate in diese Array-Liste hinzufügen. Die Array-Listengröße ist jedoch immer 0. Wie soll ich alle Koordinatenvariablen in einer Array-Liste speichern? – OtakuFitness

Antwort

0

hinzufügen mehr Parameter zu navigieren Methode ist.

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); 
    } 
} 

Call-Methode von anderer Klasse:

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(); 
       } 
      } 
     }); 

Jetzt können Sie überall ein beliebiges Objekt zugreifen.

+0

über den Navigationsparameter deklarieren, was ist der Typ davon? – OtakuFitness

+0

Was ich getan habe, ist, wenn Sie die navigate-Methode aus Ihrer Aktivität aufrufen und die Informationen onNavigateComplete in Activity abrufen müssen, dann habe ich in den Parametern der Methode den Listener übergeben, anstatt diesen in der MapViewManager-Klasse zu deklarieren. –

+0

Eigentlich habe ich das ganze Snippet nicht gelesen, weil ich es nicht nach links verschoben habe. Jetzt hab ich es verstanden. – OtakuFitness

0

Sie müssen es, indem Sie diese öffentlich machen:

Sagen Sie Ihre Aktivität Namen ‚Main‘

.... 
Public class Main extends AppCompatActivity{ 

Coordinate coor; 

//in the onNavigationComplete method do this 

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

Ich deklariere ArrayList res = new ArrayList <>(); außen und innen res.add (koordinieren), um jeden Wert in die Array-Liste aufzunehmen. Die res.size() ist jedoch immer 0. Ich kann schließlich nicht auf die Koordinate zugreifen. – OtakuFitness

+0

Beachten Sie, dass, wenn Sie ArrayList rot –

Verwandte Themen