0

所以我在片段类中有以下代码试图显示谷歌地图。即使成功检测到位置并进行了缩放,所有其他 UI 组件(例如位置按钮)都不会显示,并且地图也无法响应手势。问题是什么?

如果我尝试在膨胀之前调用 setupMap(),则地图显然还没有准备好,我使用 getMap 得到一个空指针。

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      mMapFragment = MapFragment.newInstance();
      FragmentTransaction fragmentTransaction =
              getFragmentManager().beginTransaction();
      fragmentTransaction.add(R.id.map, mMapFragment);
      fragmentTransaction.commit();

      View v = inflater.inflate(R.layout.afragment, container, false);

      setupMap();

        // Inflate the layout for this fragment
        return v;
    }

我用以下内容设置了我的地图:

private void setupMap(){
         if (mMap == null) {
             mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                                 .getMap();
             // Check if we were successful in obtaining the map.
             if (mMap != null) {
                //Set Location etc
                             ........

                mMap.getUiSettings().setAllGesturesEnabled(true);

                mMap.getUiSettings().setMyLocationButtonEnabled(true);
                mMap.getUiSettings().setZoomControlsEnabled(true);
                mMap.getUiSettings().setZoomGesturesEnabled(true);

              // Zoom in the Google Map
                mMap.animateCamera(CameraUpdateFactory.zoomTo(14));

                mMap.setOnMapClickListener(this);

             }
         }          
    }
4

2 回答 2

0

我的解决方案是使用 MapView ....

https://gist.github.com/joshdholtz/4522551

我不想更改 api 版本并排除其他设备(如 MaciejGórski 所建议),但我相信这个答案也很有用,表明嵌套片段的问题。

于 2013-06-21T09:17:05.907 回答
0

把一个Fragment放在另一个里面Fragment是很棘手的。

试试这个代码:http ://code.google.com/p/gmaps-api-issues/issues/detail?id=5064#c1

确保您使用Fragment.getChildFragmentManager. 如果您正在为低于 17 (Android 4.2) 的 API 进行开发,则必须切换到支持库。

另请阅读:http: //developer.android.com/about/versions/android-4.2.html#NestedFragments

于 2013-06-20T19:10:40.243 回答