2016-06-30 81 views
0

我在Android中使用谷歌地圖v2時遇到了一個問題。我想要一個MapView作爲佈局的一部分。我可以將MapView與標記一起繪製,但是除非我點擊地圖,否則瓷磚本身不會加載。對於每次點擊我都會繪製一個額外的圖塊(因此需要點擊4或5次來獲取整個地圖)。谷歌地圖v2瓷磚僅在Android上的點擊後繪製

我正在使用Maps V2,但在這種特殊情況下,不在片段中。作爲說明,地圖在我使用MapFragment的另一個地方可以正常工作。

以下是代碼的重要片段:

片段活性的:

佈局
public class ViewNodeDetailsGame extends MapActivity implements View.OnClickListener, OnMapReadyCallback { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     mBundle = savedInstanceState; 

     setContentView(R.layout.activity_view_node_details_game); 

     // Maps related 
     MapsInitializer.initialize(this); 

     // ... the data is fetched asynchronously here. Then, getLocation() is called 
    } 


    private void getLocation(final LinearLayout llLocation) { 

     mMapView = (MapView)llLocation.findViewById(R.id.map); 
     mMapView.onCreate(mBundle); 
     mMapView.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 

     LatLng sydney = new LatLng(-34, 151); 
     map.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
     map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     map.animateCamera(CameraUpdateFactory.newLatLng(sydney)); 

     map.getUiSettings().setMyLocationButtonEnabled(true); 
     map.getUiSettings().setZoomControlsEnabled(true); 
     map.getUiSettings().setCompassEnabled(true); 
     map.getUiSettings().setAllGesturesEnabled(true); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     if (mMapView != null) { 
      mMapView.onResume(); 
     } 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     if (mMapView != null) { 
      mMapView.onPause(); 
     } 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     if (mMapView != null) { 
      mMapView.onLowMemory(); 
     } 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) 
    { 
     super.onSaveInstanceState(outState); 
     if (mMapView != null) { 
      mMapView.onSaveInstanceState(outState); 
     } 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestoy(); 
     if (mMapView != null) { 
       mMapView.onDestroy(); 
     } 
    } 

片段。這種佈局以編程方式添加:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#fff" 
    android:padding="5dp" 
    android:orientation="vertical"> 

    <com.google.android.gms.maps.MapView 
     android:id="@+id/map" 
     android:clickable="true" 
     android:enabled="true" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" /> 

    <!-- More stuff below --> 

我包括我的API_KEY在AndroidManifest.xml文件:

<!-- lots of stuff above this... --> 
    <meta-data 
    android:name="com.google.android.geo.API_KEY" 
    android:value="AIza --rest of my key here--" 
    /> 
</application> 

下圖顯示了瓷磚畫我每次點擊獲得的進展。任何提示都表示讚賞。

enter image description here

回答

0

那是因爲你沒有在活動的的onResume()調用回調 mMapView.onResume()。

+0

是的,其實我是。我只是沒有在片段中添加。我只是更新了代碼。 – zundi

+0

getLoation()在onCreate()中調用還是從不同的callstack調用? – duanbo1983

+0

asynctask是在'onCreate()'中啓動的,當完成檢索數據時,'getLocation()'方法被調用。 – zundi