当前位置: 首页 > 知识库问答 >
问题:

如何使用谷歌地图V2内片段?

穆正青
2023-03-14

我有一个片段,它是Viewpager的一部分,我想在片段中使用Google Map V2。这就是我到目前为止所尝试的,

在我的片段中,

    private SupportMapFragment map;
      private GoogleMap mMapView;

   @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        FragmentManager fm = getChildFragmentManager();
        map = (SupportMapFragment) fm.findFragmentById(R.id.map);
        if (map == null) {
            map = SupportMapFragment.newInstance();
            fm.beginTransaction().replace(R.id.map, map).commit();
        }



    }

    @Override
    public void onResume() {
        super.onResume();
        if (mMapView == null) {
            mMapView = map.getMap();
            Marker hamburg = mMapView.addMarker(new MarkerOptions().position(HAMBURG)
                      .title("Hamburg"));
                  Marker kiel = mMapView.addMarker(new MarkerOptions()
                      .position(KIEL)
                      .title("Kiel")
                      .snippet("Kiel is cool")
                      .icon(BitmapDescriptorFactory
                          .fromResource(R.drawable.ic_launcher)));


                  mMapView.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));

                  // Zoom in, animating the camera.
           mMapView.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);


        }
    }

在我的布局子片段信息中。xml,我有,

<fragment
            android:id="@+id/map"
            class="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/tableLayout1" />

我现在能看到地图了。但是标记没有显示出来。我认为我的谷歌地图mMapView是空的。请帮我解决这个问题。提前感谢。

共有3个答案

唐弘和
2023-03-14

我或多或少也有同样的问题。我有一个导航抽屉,我想把地图放在一个片段中。

我遵循了以下思路(但它是西班牙语):https://groups.google.com/forum/#!msg/Desarrolladoresandroid/1cvqPm0EZZU/Q801Yvb2ntYJ

线索是(在我看来)改变layout.xml文件:而不是你的布局中的片段subfragment_info.xml你需要改变为这样:

<com.google.android.gms.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />`

这里是线程内部的代码(您可以使用它并进行调整):https://groups.google.com/d/msg/desarrolladores-android/1cvqPm0EZZU/9srw_9feamUJ

宗啸
2023-03-14

您必须决定是在codenew SupportMapFragment()中创建片段,还是从xmlclass=“com.google.android.gms.maps.SupportMapFragment”中膨胀。

实际上,对于另一个片段,您不能在xml中有一个片段。阅读嵌套片段s。

关于如何添加嵌套的SupportMapFragment,您可以按照此注释进行操作。

谢华彩
2023-03-14

为map创建一个框架,在其中它将被添加到您的xml布局中

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map_container">

<!-- The map fragments will go here --> 
</RelativeLayout>

不要将class=“com.google.android.gms.maps.SupportMapFragment”包含在xml中,也不要将其包含在片段类中,也不要在ActivityCreated中手动获取

    @Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    FragmentManager fm = getChildFragmentManager();
    fragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
    if (fragment == null) {
        fragment = SupportMapFragment.newInstance();
        fm.beginTransaction().replace(R.id.map_container, fragment).commit();
    }


/***at this time google play services are not initialize so get map and add what ever you want to it in onResume() or onStart() **/
}

@Override
    public void onResume() {
        super.onResume();
        if (map == null) {
            map = fragment.getMap();
            map.addMarker(new MarkerOptions().position(new LatLng(0, 0)));
        }
    }

若你们遇到任何问题,发生非法状态异常,只需写下面的代码

/**此问题在(Google Bugs)中跟踪*http://code.google.com/p/gmaps-api-issues/issues/detail?id=5064添加*代码由于非法状态异常在重新单击选项卡时发生**修复它的一个短期解决方案是将以下内容添加到*onDetach()的你称之为*/的每一个片段

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

        try {
            Field childFragmentManager = Fragment.class
                    .getDeclaredField("mChildFragmentManager");
            childFragmentManager.setAccessible(true);
            childFragmentManager.set(this, null);

        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }

//如果您想在活动中显示地图,只需通过//FragmentActivity扩展您的活动,编写下面提到的代码

在创建

FragmentManager fm = getSupportFragmentManager();
        fragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
        if (fragment == null) {
            fragment = SupportMapFragment.newInstance();
            fm.beginTransaction().replace(R.id.map_container, fragment)
                    .commit();
    }

在简历中

@Override
    protected void onResume() {
        super.onResume();
        if (googleMap == null) {
            initilizeMap();

        }
    }

private void initilizeMap() {
        if (googleMap != null) {

            googleMap = fragment.getMap();
            googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            googleMap.getUiSettings().setMyLocationButtonEnabled(true);
            googleMap.getUiSettings().setCompassEnabled(true);
            googleMap.getUiSettings().setRotateGesturesEnabled(true);

            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(new LatLng(latitude, longitude)).zoom(10).build();
            googleMap.animateCamera(CameraUpdateFactory
                    .newCameraPosition(cameraPosition));

            // create marker
            MarkerOptions marker = new MarkerOptions().position(new LatLng(
                    latitude, longitude));
            // ROSE color icon
            marker.icon(BitmapDescriptorFactory
                    .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
            // adding marker
            googleMap.addMarker(marker);

            // check if map is created successfully or not
            if (googleMap == null) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }

额外的帮助可以从这些链接
https://code.google.com/p/gmaps-api-issues/issues/detail?id=5064#c1https://developers.google.com/maps/documentation/android/map

 类似资料:
  • activity_main.xml 舱单 错误输出

  • 我正在尝试建立地图应用程序和遵循这个链接一步一步。我在这里找到了类似的话题,但没有帮助我。我想显示地图,但当我运行它,它返回的力量关闭和我的android设备。我看到了很多关于这个错误的问题,但没有人真正回答我的问题。这是我的logcat: 这里是我的mainactivity.java 我已经从下面链接一步一步地阅读了,但是在我的代码中似乎有很多错误。我错过了什么?有什么建议吗?多谢。

  • 如何使Android Google Maps API v2中的标记变得可点击,以便它们要么打开一个带有选项的菜单,要么开始一个新的活动?我相信我在我的应用程序中的标记目前在一个“newb”方法。我没有为它们分配一个名称或方法,以便能够将其与所需代码的其余部分链接在一起。 如果你回答这个问题,请包括一个标记被引入一个独特的名称,然后被设置为可点击打开一个新活动的示例代码。

  • 授权失败。请参阅https://developers.google.com/maps/documentation/android/start了解如何正确设置地图。 确保以下内容与API控制台中的内容相对应:包名称:,API密钥:,证书指纹:联系Google服务器失败。建立连接后将进行另一次尝试。 加载地图失败。联系Google服务器时出错。这可能是身份验证问题(但可能是由于网络错误)。 我知道关于

  • 我试图在我的应用程序中添加谷歌地图V2:我已经添加了清单文件中的所有权限 并添加Google play库 但是我发现一个错误,连接谷歌服务器失败,请帮助我

  • 我正在使用谷歌地图v2,并得到了这个错误。 找不到从方法Maps.ag.an.a引用的类“Maps.af.k” 但我还是犯了这个错误。