2015-04-30 101 views
0

這是我的問題。我目前有一個3件物品的導航抽屜。我希望這些項目中的一個是地圖。我已經遵循谷歌文檔,並已成功創建我的地圖。問題是我的標記不會顯示出來。我知道問題是什麼,但我不知道如何解決它。將谷歌地圖添加到導航抽屜

這是地圖片段。正如你可以看到我正在執行OnMapReadyCallback,我也包含了onMapReady()方法。 onMapReady()沒有被調用(這是問題),因爲我沒有調用getMapAsync()方法。我不知道應該在哪裏放置它,更不用說如何根據我的代碼來調用它。

我還在我的Navigation Drawer中包含了調用地圖片段的代碼。地圖xml就像google文檔示例中的一樣。就像我之前說過的;我的地圖確實有效,但標記不顯示,因爲onMapReady()未被調用。

地圖碎片:

public class MapsFragment extends Fragment implements OnMapReadyCallback { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.activity_maps, container, false); 
     return rootView; 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     googleMap.addMarker(new MarkerOptions().position(new LatLng(29.702182, -98.124561)).title("marker")); 
     googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
    } 

} 

抽屜式導航代碼:

private void selectItem(int position) { 
    Toast.makeText(MainActivity.this, "Time for an upgrade", Toast.LENGTH_SHORT).show(); 

    // This is where the fragment view changes will be put 
    Fragment fragment = null; 

    switch (position) { 
     case 0: 
      fragment = new Blank1Fragment(); 
      break; 
     case 1: 
      //fragment = new Blank2Fragment(); 
      fragment = new MapsFragment(); 
      break; 
     case 2: 
      fragment = new Blank3Fragment(); 
      break; 
     default: 
      break; 
    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } else { 

    } 
} 
+0

我對我的帖子做了一些編輯。你能告訴我建議的代碼應該在哪裏以及如何正確實現。 – jdubicki

回答

0

onMapReady()不會被調用(這就是問題所在),因爲我不是調用getMapAsync()方法。

是的。

在你Fragment包含地圖(BTW它必須是一個Fragment,而不是一個Activity),你應該有你從你的XML佈局檢索的SupportMapFragment對象。

然後,只需調用getMapAsync()

supportMapFragment.getMapAsync(new OnMapReadyCallback() { 
    @Override 
    public void onMapReady(final GoogleMap googleMap) { 
     // ... 
    } 
}); 

Documentation

0

如果你不調用初始化您的地圖的方法,它需要在onCreateView方法進行初始化。

編寫代碼onCreateView方法中:

MapsInitializer.initialize(getActivity()); 
mapView = (MapView) v.findViewById(R.id.mapaPrincipal); 
mapView.onCreate(savedInstanceState); 
map = mapView.getMap(); 
if(map != null) { 
    ... do your changes to the map 
} 
+0

如果它對您有用,請回答這個問題。提前Tks。 –

1

我有同樣的問題。但我解決它以這樣一種方式:

public class Map extends Fragment { 
    private SupportMapFragment mapFragment; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.activity_maps, container, false); 
     return rootView; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     FragmentManager fm = getChildFragmentManager(); 
     mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.mapView); 
     if (mapFragment == null) { 
      mapFragment = SupportMapFragment.newInstance(); 
      fm.beginTransaction().replace(R.id.mapView, mapFragment).commit(); 
     } else { 
      mapFragment.getMapAsync(new OnMapReadyCallback() { 
       @Override 
       public void onMapReady(final GoogleMap googleMap) { 
        googleMap.addMarker(new MarkerOptions().position(new LatLng(29.702182, -98.124561)).title("marker")); 
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
       } 
      }); 
     } 
    } 
} 

所以,你需要添加方法onActivityCreated到您的代碼(而不是onMapReady),和標記是可見的。