将地图(谷歌地图v2)放入片段内的最佳方法

时间:2015-05-21 09:56:45

标签: android android-fragments google-maps-android-api-2

我有一个片段(ApartmentFragment),这是一个显示公寓详情的页面。我想添加一张小地图来显示公寓的位置。 为了清楚起见,我使用了github上的MaterialNavigationDrawer,我的应用程序由一个Activity(导航抽屉)和许多片段组成。

我读过的每个stackoverflow帖子都没有帮助我。他们中的许多人有点混乱。我不想只在ApartmentFragment里面的地图,我想要显示其他东西加上地图。 这是最好的方法吗? 可以在片段中放置mapfragment吗?或者我需要在活动中改造ApartmentFragment?

1 个答案:

答案 0 :(得分:3)

你读的大部分内容都是正确的。您只需使用MapView代替MapFragment

https://developer.android.com/reference/com/google/android/gms/maps/MapView.html

然后在你的ApartmenFragment上你必须对mapview进行所有回调

  • onCreate(Bundle)
  • onResume()
  • onPause()
  • 的onDestroy()
  • 的onSaveInstanceState()
  • onLowMemory()
像这样:

    private MapView mapView;

    @Nullable @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

       // inflate your view `root` and then call ...
       mapView = (MapView) root.indViewById(R.id.map_view);
       mapView.onCreate(savedInstanceState);
       mapView.getMapAsync(this);

       return root;
    }

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

    @Override public void onPause() {
       super.onPause();
       mapView.onPause();
    }

    @Override public void onDestroyView() {
       super.onDestroyView();
       mapView.onDestroy();
    }

    @Override public void onSaveInstanceState(Bundle outState) {
       super.onSaveInstanceState(outState);
       mapView.onSaveInstanceState(outState);
    }

    @Override public void onLowMemory() {
       super.onLowMemory();
       mapView.onLowMemory();
    }

    @Override public void onMapReady (GoogleMap googleMap) {
          // from https://developer.android.com/reference/com/google/android/gms/maps/OnMapReadyCallback.html

          // and here you can do your map stuff with `googleMap`
    }