2014-02-21 83 views
1

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

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

发布您的日志.... – bladeX

回答

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。这对我来说很有效,可能会给你。