Android的碎片(与兼容包的2.3.3)创建"指定的孩子已经有家长错误"碎片、家长、错误、孩子

2023-09-05 05:30:19 作者:挥刀提笔战群狼

我使用的是兼容包使用的碎片在我的Andr​​oid应用程序。我已经在Nexus One的运行2.3.3和谷歌API 2.2模拟器测试应用程序。

I'm using fragments in my Android application using the compatibility package. I have tested the application on a Nexus One running 2.3.3 and an Google API 2.2 emulator.

在(使用片段标记),通过布局XML它的伟大工程,添加片段。

When adding the fragment via the layout XML it works great (using a fragment tag).

在动态添加的片段成的FrameLayout不会成功的片段添加到容器,并引发以下错误。

When adding the fragment dynamically into a FrameLayout it does not successfully add the fragment to the container and it throws the following error.

alStateException: The specified child already has a parent. You must call removeView() on the child's parent first

完整堆栈跟踪这是下文。

Full stacktrace for this is below.

05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.view.ViewGroup.addView(ViewGroup.java:1871)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.view.ViewGroup.addView(ViewGroup.java:1828)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.view.ViewGroup.addView(ViewGroup.java:1808)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:743)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:933)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:578)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1219)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:380)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.os.Handler.handleCallback(Handler.java:587)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.os.Looper.loop(Looper.java:123)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at android.app.ActivityThread.main(ActivityThread.java:3839)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at java.lang.reflect.Method.invokeNative(Native Method)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at java.lang.reflect.Method.invoke(Method.java:507)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-17 19:44:03.518: DEBUG/UNHANDLED_EXCEPTION(7735):     at dalvik.system.NativeStart.main(Native Method)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735): FATAL EXCEPTION: main
05-17 19:44:03.528: ERROR/AndroidRuntime(7735): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.view.ViewGroup.addView(ViewGroup.java:1871)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.view.ViewGroup.addView(ViewGroup.java:1828)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.view.ViewGroup.addView(ViewGroup.java:1808)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:743)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:933)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:578)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1219)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:380)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.os.Handler.handleCallback(Handler.java:587)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.os.Looper.loop(Looper.java:123)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at android.app.ActivityThread.main(ActivityThread.java:3839)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at java.lang.reflect.Method.invokeNative(Native Method)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at java.lang.reflect.Method.invoke(Method.java:507)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-17 19:44:03.528: ERROR/AndroidRuntime(7735):     at dalvik.system.NativeStart.main(Native Method)

这是我使用的布局 - 的的FrameLayout是容器我插入

This is the layout I'm using - the FrameLayout is the container I'm inserting into.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <HorizontalScrollView android:layout_height="wrap_content"
        android:layout_width="wrap_content" android:scrollbars="none"
        android:id="@+id/activity_phone_tabbedview_scroll">

        <LinearLayout android:orientation="horizontal"
            android:layout_height="wrap_content" android:layout_width="fill_parent">

            <Button android:text="Something" android:layout_height="wrap_content"
                android:layout_width="wrap_content" android:background="@drawable/tabs"
                android:textColor="@color/White" android:paddingLeft="10dp"
                android:paddingRight="10dp" android:paddingTop="10dp"
                android:paddingBottom="10dp" android:textSize="19sp"
                android:onClick="Something" />
            <Button android:layout_width="wrap_content" android:id="@+id/button1"
                android:layout_height="wrap_content" android:paddingLeft="10dp"
                android:textColor="@color/White" android:text="Something"
                android:background="@drawable/tabs" android:paddingBottom="10dp"
                android:textSize="19sp" android:paddingRight="10dp"
                android:paddingTop="10dp"
                android:onClick="Something"></Button>
            <Button android:layout_width="wrap_content" android:id="@+id/button2"
                android:layout_height="wrap_content" android:paddingLeft="10dp"
                android:textColor="@color/White" android:text="Something"
                android:background="@drawable/tabs" android:paddingBottom="10dp"
                android:textSize="19sp" android:paddingRight="10dp"
                android:paddingTop="10dp"
                android:onClick="Something"></Button>

            <Button android:text="Something" android:layout_height="wrap_content"
                android:layout_width="wrap_content" android:background="@drawable/tabs"
                android:textColor="@color/White" android:paddingLeft="10dp"
                android:paddingRight="10dp" android:paddingTop="10dp"
                android:paddingBottom="10dp" android:textSize="19sp" 
                android:onClick="Something"/>

        </LinearLayout>

    </HorizontalScrollView>

    <FrameLayout  android:id="@+id/activity_phone_tabbedviewer_fragment_container" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"
    android:layout_below="@id/activity_phone_tabbedview_scroll">
    </FrameLayout>

</RelativeLayout>

在code我用实际插入片段如下:

The code I'm using to actually insert the fragment is below.

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
NewsList newsList = new NewsList();
fragmentTransaction.add(R.id.activity_phone_tabbedviewer_fragment_container, newsList);
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.commit();

没有人有任何的想法有什么不好?

Does anyone have any idea what is wrong?

推荐答案

你能不能发布您的 onCreateView(...)方法在新闻列表 片段

Can you post the content of your onCreateView(...) method in the NewsList Fragment?

我猜你是叫 LayoutInflater.inflate(...)在一些点。如果是这样,你需要使用overloaded版本并通过 attachToRoot 查看将被添加到 Fragment.replace(...)通话的层次结构,所以在通货膨胀不应该连接。

I'm guessing that you are calling LayoutInflater.inflate(...) at some point. If so you need to use the overloaded version and pass attachToRoot as false as the View will be added to the hierachy in the Fragment.replace(...) call, so should not be attached during inflation.