Fragment中的MapFragment仅适用于旋转

时间:2014-02-13 07:34:27

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

我遇到MapFragment的问题。问题是地图第一次打开片段,但是当我离开它(我有侧边栏菜单)并回来时 - 屏幕只是白色。但是如果我旋转我的手机,地图会显示出来。 从调试中我可以看到,当我进入第一次或旋转时会发生这种情况,但是当我回到片段时它不会发生。

02-13 08:27:37.263: I/dalvikvm-heap(4553): Grow heap (frag case) to 23.106MB for 4194320-byte allocation
02-13 08:27:37.283: D/dalvikvm(4553): GC_FOR_ALLOC freed <1K, 18% free 23629K/28748K, paused 12ms, total 12ms
02-13 08:27:37.323: D/dalvikvm(4553): GC_FOR_ALLOC freed 4356K, 21% free 19534K/24648K, paused 13ms, total 13ms

以下是片段onCreateView:

的java代码
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (rootView != null) {
        Log.d("map","rootView != null");
        ViewGroup parent = (ViewGroup) rootView.getParent();
        if (parent != null)
            Log.d("map","parent != null");
            parent.removeView(rootView);
    }
    try {
        Log.d("map","inside try");
        rootView = inflater
                .inflate(R.layout.fragment_map, container, false);
        setupGmap();
    } catch (InflateException e) {
        Log.d("map","inside catch");
    }
    return rootView;
}

在XML中:

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

为了更清楚地说明会发生什么: 打开应用,点击菜单中的地图 - 地图正确显示 - &gt;移动到另一个菜单项 - &gt;再次点击地图菜单 - 白色屏幕而不是地图 - &gt;旋转手机 - 地图神奇地出现。

干杯

1 个答案:

答案 0 :(得分:0)

使用此

<fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
         />

并覆盖方法OnDestroyView并将此代码放在OnDestroyView()

public void onDestroyView() 
 {
    super.onDestroyView(); 
    Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));  
    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
    ft.remove(fragment);
    ft.commit();
}