使用谷歌地图导航抽屉和viewpager崩溃

时间:2014-02-21 14:00:24

标签: android google-maps android-fragments

我在viewpager中使用谷歌地图片段,这个viewpager是导航抽屉片段的一部分。现在当我开始这个我的应用程序它工作正常,但当我更改navdrawer项目,然后回到这个地图片段,应用程序崩溃与此错误:

android.view.InflateException: Binary XML file line #8: Error inflating class fragment

我已经尝试了所有内容并在此搜索了一整天,但找不到任何适当的解决方案来解决此错误。

现在这是我的代码:

MapFragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    if (view != null) {
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null) {
            parent.removeView(view);
        }
    }

    try {
        view = inflater
                .inflate(R.layout.activity_mapview, container, false);
        setUpMapIfNeeded();
    } catch (Exception e) {
        e.printStackTrace();
    }
    initialize(view);
    return view;
}

public void setUpMapIfNeeded() {


    googleMap = ((SupportMapFragment) this.getActivity()
            .getSupportFragmentManager().findFragmentById(R.id.map))
            .getMap();

}

activity_mapview.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:padding="@dimen/ten_dp" >

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

1 个答案:

答案 0 :(得分:4)

我相信你的问题是你的程序每次选择地图片段时都会尝试创建一个具有相同ID的新片段。要解决此问题,您的地图需要获取值NULL。

尝试将其粘贴到MapFragment类中:

    @Override
public void onDestroyView() {

    SupportMapFragment f = (SupportMapFragment) getFragmentManager()
            .findFragmentById(R.id.map);

    if (f != null) {
        try {
            getFragmentManager().beginTransaction().remove(f).commit();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    super.onDestroyView();
}

在onCreateView下面。这对我有用,也许对你有帮助。