Android 返回到上一个映射片段时出现膨胀类映射片段错误

Android 返回到上一个映射片段时出现膨胀类映射片段错误,android,fragment,supportmapfragment,Android,Fragment,Supportmapfragment,我有一个FragmentActivity,它替换不同的片段来显示信息。其中一个片段(StepTwoAddressFragment)的布局中包含一个映射。第一次,这个片段正确地绘制了视图,但是当我回到堆栈中的这个片段时,应用程序崩溃了。我需要将这个片段添加到片段后堆栈中 android.view.InflateException:二进制XML文件行#9:膨胀类片段时出错 碎片活动 switch (mCurrentSection) { case SECTION_STEP_TWO_MAPS_A

我有一个FragmentActivity,它替换不同的片段来显示信息。其中一个片段(StepTwoAddressFragment)的布局中包含一个映射。第一次,这个片段正确地绘制了视图,但是当我回到堆栈中的这个片段时,应用程序崩溃了。我需要将这个片段添加到片段后堆栈中

android.view.InflateException:二进制XML文件行#9:膨胀类片段时出错

碎片活动

switch (mCurrentSection) {
    case SECTION_STEP_TWO_MAPS_ADDRESS:
        SelectNewPositionFragment fragm = SelectNewPositionFragment.newInstance();
        mCurrentFragment = fragm;
        break;

    case SECTION_STEP_TWO_ADDRESS:
        mCurrentFragment = StepTwoAddressFragment.newInstance();
        break;

    case SECTION_STEP_TWO_WHY_GO:
        mCurrentFragment = StepTwoWhyGoFragment.newInstance();
        break;
}

if (mCurrentFragment != null) {
    FragmentTransaction ft = mFragmentManager.beginTransaction().replace(R.id.main_content_frame, mCurrentFragment);
    if (hasToAddToBackStack()) {
        ft.addToBackStack(null);
    }
    ft.commit();
}

private boolean hasToAddToBackStack() {
    return mCurrentSection != SECTION_STEP_TWO_MAPS_ADDRESS || mCurrentSection != SECTION_STEP_TWO_ADDRESS;
}
片段\选定\新建\位置\布局.xml

................

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

................

我也试过这个代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (view != null) {
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null)
            parent.removeView(view);
    }
    try {
        view = inflater.inflate(R.layout.map, container, false);
    } catch (InflateException e) {
        /* map is already there, just return view as it is */
    }
    return view;
}
解决方案 我在布局中更改片段视图,并使用FrameLayout进行更改

<FrameLayout
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
以及包含地图的片段

mapFragment = new MapBaseFragment();
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.replace(R.id.map, mapFragment);
ft.commit();
最后,删除onDestroyView代码


这对我来说很合适。

您可以始终使用
FragmentTransaction.add()
而不是
FragmentTransaction.replace()

这将使包含地图的片段位于新片段下面

您可能需要将背景设置为不透明,并使用
FragmentTransaction.addToBackStack()

public class MapBaseFragment extends SupportMapFragment {

...

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

        setUpMap();
    }

...

}
mapFragment = new MapBaseFragment();
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.replace(R.id.map, mapFragment);
ft.commit();