2016-12-20 10 views
0

У меня есть класс с именем MapViewManager, в нем у меня есть метод, называемый навигации, как показано ниже:Как я могу получить доступ к переменной из метода обратного вызова на 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(); 
       } 
      } 
     }); 
    } 
} 

Я хочу, чтобы получить доступ к переменной с именем координат onNavigateComplete обратного вызова метод извне, чтобы другие классы могли использовать переменную координат для чего-то. Как я могу это сделать?

+0

Объявить 'Координатная координата' снаружи и лучше всего сделать координированный код внутри' onNavigateComplete' –

+0

Мне нужны все координатные переменные, чтобы я объявлял список массивов снаружи и внутри, добавляя каждую координату в этот список массивов. Но размер списка массивов всегда равен 0. Как мне сделать, чтобы сохранить все координатные переменные в списке массивов? – OtakuFitness

ответ

0

Добавить еще один параметр для перемещения метода.

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

метод вызова из другого класса:

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

Теперь вы можете получить доступ к любому объекту в любом месте.

+0

О параметре навигации, что это за тип? – OtakuFitness

+0

Что я сделал, например, если вы вызываете метод навигации из своей активности и вам нужно получить информацию о onNavigateComplete в Activity, то в параметрах метода я передал слушатель вместо объявления этого в классе MapViewManager. –

+0

На самом деле я не читал весь фрагмент, потому что я не двигал его влево. Теперь я понял. – OtakuFitness

0

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

Произнесите имя деятельность «Main»

.... 
Public class Main extends AppCompatActivity{ 

Coordinate coor; 

//in the onNavigationComplete method do this 

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

Я объявляю ArrayList res = new ArrayList <>(); внешний и внутренний res.add (координата), чтобы добавить каждое значение в список массивов. Однако res.size() всегда равен 0. В конечном итоге я не могу получить доступ к координате. – OtakuFitness

+0

Обратите внимание, что когда вы объявляете ArrayList red –