如何正确实现片段中的谷歌地图?

时间:2016-03-07 03:12:47

标签: java android google-maps android-fragments google-maps-api-3

我搜索了stackoverflow并查看了很多解决方案,例如 here

here

我已经看过更多,但在性能方面没有一个强大。 这是我到目前为止所得到的

这个可以工作,但只有一次片段首次创建但后来返回到地图片段后,它给了我布局通胀异常

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
{
    view=inflater.inflate(R.layout.fragment_public_maps,null,false);
    googleMap= (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.pub_map);
    googleMap.getMapAsync(this);
    return view;
}

我也尝试了这个,它可以工作,但它使我的应用程序变慢,有时崩溃

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
{
    try
    {
        view=inflater.inflate(R.layout.fragment_public_maps,null,false);

    }
    catch (InflateException e)
    {
        googleMap= (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.pub_map);
        googleMap.getMapAsync(this);
        return view;
    }
    googleMap= (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.pub_map);
    googleMap.getMapAsync(this);
    return view;

}

如果有人能指出正确的方向,我不知道还能做什么我真的很感激。

1 个答案:

答案 0 :(得分:1)

我这样做并且效果很好的是将FrameLayout放在片段xml文件中,如下所示:

<FrameLayout
    android:id="@+id/map_id"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

然后在您的片段onActivityCreated方法中执行此操作:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    mMapFragment = MapFragment.newInstance();
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
        getChildFragmentManager().beginTransaction().replace(R.id.map_id, mMapFragment).commit();
    } else {
        getFragmentManager().beginTransaction().replace(R.id.map_id, mMapFragment).commit();
    }
    mMapFragment.getMapAsync(this);
}

如果您正在使用支持片段,

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    mMapFragment = SupportMapFragment.newInstance();
    getSupportFragmentManager().beginTransaction().replace(R.id.sod_map_lite, mMapFragment).commit();
}