Google地图不会显示标记

时间:2015-07-28 18:29:58

标签: android xml google-maps android-fragments android-studio

开始使用Android Studio,尝试在片段中显示Google地图。地图显示正常,我可以缩放/移动地图,但我的标记不会显示。

这是我的MapsActivity(HomePageMapsActivity.java):

public class HomePageMapsActivity extends FragmentActivity {

private GoogleMap mMap; // Might be null if Google Play services APK is not available.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_page_maps);
    setUpMapIfNeeded();
}

@Override
protected void onResume() {
    super.onResume();
    setUpMapIfNeeded();
}

/**
 * Sets up the map if it is possible to do so, and the map has not already been instantiated.
 * If not installed {@link SupportMapFragment} (and
 * {@link com.google.android.gms.maps.MapView MapView}) will prompt user to
 * install/update the Google Play services APK on their device.
 */
private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the map.
    if (mMap == null) {
        // Try to obtain the map from the SupportMapFragment.
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            setUpMap();
        }
    }
}

/**
 * This is where we can add markers, lines, listeners, or move the camera.
 * Only call once and when sure {@link #mMap} is not null.
 */
private void setUpMap() {
    mMap.addMarker(new MarkerOptions().position(new LatLng(33, -84)).title("Atlanta"));
}

}

xml(activity_home_page_maps.xml):

<?xml version="1.0" encoding="utf-8"?>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
tools:context="net.datanetics.campusresponseapp.HomePageMapsActivity" />

主页xml(activity_home_page):

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <fragment
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/HomePageMap"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="9"
        tools:context=".HomePageMapsActivity"
        class="com.google.android.gms.maps.SupportMapFragment" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:weightSum="1" >

        <Button
            android:id="@+id/MenuButton"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.5"
            android:background="#3498DB"
            android:text="Menu"
            android:textColor="#FFFFFF" />

        <Button
            android:id="@+id/EmergencyButton"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.5"              
            android:background="#C1392B"
            android:text="Emergency"
            android:textColor="#FFFFFF" />

    </LinearLayout>

4 个答案:

答案 0 :(得分:1)

您确定,GoogleMap不是空的吗?尝试异步获取地图:

public class YourActivity extends AppCompatActivity implements OnMapReadyCallback {
    private GoogleMap mMap;
    SupportMapFragment fragMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_page_maps);

        fragMap = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        fragMap.getMapAsync(this);
    }

    @Override
    public void onMapReady(final GoogleMap map) {
        if (map != null) {
            mMap = map;
            setUpMap();
        }
    }
}

答案 1 :(得分:0)

我让你的问题改变了这一行

   mMap.addMarker(new MarkerOptions().position(new LatLng(33, -84)).title("Atlanta"));

   mMap.addMarker(new MarkerOptions().position(new LatLng(33.7550,84.3900)).title("Atlanta"));

你必须在lat和lng中传递double值。

答案 2 :(得分:0)

两件事:

1)您试图过早使用地图。你需要有视图 首先,所以你的代码应该在onCreateView()而不是onCreate()。 更正:onCreateView()适用于片段,而不适用于活动。 我用来测试它的应用程序使用片段来保存地图,而不是 FragmentActivity。

2)我发现我需要通过推动地图图层的初始化 显式调用mMapView.onCreate()和mMapView.onResume()。看到 还JoelLipman.com

public class HomePageMaps extends SupportMapFragment {
  private View mView;
  private View mMapView;
  private GoogleMap mMap;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) {
    super.onCreateView(inflater, group, state);
    mView = inflater.inflate(R.layout.activity_home_page_maps, group, false);
    mMapView= (MapView)mView.findViewById(R.id.map);
    mMapView.onCreate(state);
    mMapView.onResume();
    mMap= mMapView.getMap();
    mapUpdate();
    return (mView);
  }

  private void mapUpdate() {
    LatLng myLoc= new LatLng(33,-84);
    MarkerOptions opt = new MarkerOptions();
    mMap.clear();
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myLoc, 15));
    mMap.addMarker(opt.position(myLoc).title("Me"));
  }
}

答案 3 :(得分:0)

我找到了我的&#34; FirstMap&#34;项目,希望它有所帮助。你会想要的 将地图尽快移动到片段中。

MapsActivity.java

public class MapsActivity extends FragmentActivity {
  private PageMap mPageMap;

  public interface IAction {
    boolean onClick(int BtnID);
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mPageMap= new PageMap();
    setContentView(R.layout.activity_main);
  }

  public void onClick(View Ctrl) {
    int BtnID= Ctrl.getId();
    switch(BtnID) {
      case R.id.MainBtn_Map:  ShowMap(); break;
      default:                mPageMap.onClick(BtnID);
    }
  }

  private void ShowMap() {
    LoadPage(mPageMap);
  }

  public void LoadPage(Fragment NewPage) {
    FragmentManager Mgr= getSupportFragmentManager();
    FragmentTransaction Action= Mgr.beginTransaction();
    Action.replace(R.id.Main_FragmentContainer,NewPage);
    Action.show(NewPage);
    Action.commit();
  }
}

res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
>
  <Button
    android:id="@+id/MainBtn_Map"
    android:onClick="onClick"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    android:text="Load Map"
  />

  <LinearLayout
    android:id="@+id/Main_FragmentContainer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@color/material_blue_grey_800"
  >

  </LinearLayout>

</LinearLayout>

PageMap.java

public class PageMap extends SupportMapFragment implements MapsActivity.IAction {
  private FragmentActivity mActivity;
  private MapView mMapView;
  private GoogleMap mMap;

  @Override public void onAttach(Activity parent) {
    mActivity= (FragmentActivity)parent;
    super.onAttach(parent);
  }

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle instance) {
    super.onCreateView(inflater,group,instance);
    View view= inflater.inflate(R.layout.page_map,group,false);
    mMapView= (MapView)view.findViewById(R.id.map);
    mMapView.onCreate(instance);
    mMapView.onResume();
    mMap= mMapView.getMap();
    return(view);
  }

  public boolean onClick(int BtnID) {
    switch(BtnID) {
      case R.id.PageMap_BtnUpdate:         return (Update());
    }
    return (false);
  }

  private boolean Update() {
    setUpMap();
    return(true);
  }

  private void setUpMap() {
    if(mMap!=null) {
      LatLng loc = new LatLng(-34, 151);
      mMap.addMarker(new MarkerOptions().position(loc).title("Marker"));
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 15));
    }
  }
}
//EOF: PAGEMAP.JAVA

res/layout/page_map.xml

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
>
  <Button
    android:id="@+id/PageMap_BtnUpdate"
    android:onClick="onClick"
    android:text="Update"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
  />
  <com.google.android.gms.maps.MapView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
  />
</LinearLayout>