片段内的MapFragment,应用程序崩溃重新打开片段

时间:2014-04-19 16:22:34

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

我在另一个片段中有一个mapfragment

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.google.android.gms.maps.MapFragment"
/>
</FrameLayout>

并在oncreateview中初始化地图

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.event_fragment, null);
    try{
        events = new ArrayList<EventsModel>();

        try {               
            initilizeMap();

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

        double latitude = 24.875419;
        double longitude = 66.993293;
        CameraPosition cameraPosition = new CameraPosition.Builder().target(
                new LatLng(latitude, longitude)).zoom(12).build();
        map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        loadEvents().execute();
    }catch(Exception e){

    }

    return view;
}

它工作正常但是当我按下后退按钮并重新打开这个片段时它会崩溃

04-19 21:18:21.803: E/AndroidRuntime(31612): Caused by: java.lang.IllegalArgumentException: Binary XML file line #6: Duplicate id 0x7f050006, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment
然后我用Google搜索并将其放入ondestroy

Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));  
    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
    ft.remove(fragment);
    ft.commit();

上面的问题已经解决了现在它给了我nullpointer重新打开有mapfragment的片段可能是因为我用上面的代码删除了它但现在解决了什么?

1 个答案:

答案 0 :(得分:2)

在创建地图片段视图或销毁时,请确保您已正确检查地图膨胀为空的条件。

将这个放在onDestroy()方法

SupportMapFragment mapFragment = ((SupportMapFragment) 
getActivity().getSupportFragmentManager().findFragmentById(R.id.map_location_sharing));

if(mapFragment != null) {
    FragmentManager fM = getFragmentManager();
    fM.beginTransaction().remove(mapFragment).commit();