指定的子项已有父项.您必须首先在子级父级上调用removeView()(具有片段和ViewPager的Activity)

Edu*_*ira -1 java android android-layout android-fragments android-viewpager

我创建这篇文章是因为我无法解决这个问题.我的想法是一个片段活动,在顶部有一个片段,它是一个地图,在底部有一个视图寻呼机,允许用户用信息扫描片段.


主要活动(片段活动)

public class RestaurantDetails extends FragmentActivity {

    private static final String TAG = "ImageGridActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.restaurantinfo);
    inicialize();

            /* Adding fragment in a relativelayout */
    if (getSupportFragmentManager().findFragmentByTag(TAG) == null) {
        final FragmentTransaction ft = getSupportFragmentManager()
                .beginTransaction();
        ft.add(R.id.fragment_container, new MapFragment(), TAG);
        ft.commit();
    }

        /* Pager on bottom */
        mPager.setCurrentItem(getIntent().getExtras().getInt("idRest"));
}
Run Code Online (Sandbox Code Playgroud)

布局主要活动

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

      <RelativeLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="212dp"
        tools:context=".MapFragment" />


    <android.support.v4.view.ViewPager
        android:id="@+id/pagerDetails"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

地图片段

public class MapFragment extends Fragment {

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        super.onCreateView(inflater, container, savedInstanceState);
        context = getActivity();

        mapLayout = (RelativeLayout) inflater.inflate(R.layout.ipmaps, container, false);

        locationImage = (ImageView) mapLayout
                .findViewById(R.id.ipmaps_my_location_img_view);

        setupIpMapsGenericResources();

        return locationImage;
    }
}
Run Code Online (Sandbox Code Playgroud)

地图布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ipmaps_relative_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#e1e1e1"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/ipmaps_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </FrameLayout>

    <ImageView
        android:id="@+id/ipmaps_my_location_img_view"
        android:src="@drawable/compasso"
        android:layout_width="40dip"
        android:layout_height="40dip"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="15dip"
        android:layout_marginTop="15dip" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我也试过而不是在相对布局中添加片段,将其添加到元素上但没有成功.我绝望地寻求帮助.在程序运行MapFragment中的onCreateView方法后,他抛出了这个错误:"指定的子节点已经有父节点.你必须首先在子节点的父节点上调用removeView()"

Emm*_*uel 5

您在返回ImageViewMapFragmentonCreateView().您应该返回,mapLayout因为它是ViewGroup层次结构的根.

而且,你在打电话super.onCreateView().通过这样做,您正在调用MapFragment父级onCreateView(),默认情况下返回null.

作为提示,您应该避免提供与类框架提供的类共享的类名.