【问题标题】:The specified child already has a parent, removeView() on the child's parent first指定的child已经有一个parent,先在child的parent上removeView()
【发布时间】:2013-07-30 13:58:20
【问题描述】:

我发布我的问题是因为我阅读了很多主题,但没有人能很好地回答我的问题。

我将片段与 android 的滑动菜单库一起使用。

这是我的代码:

我的片段

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (savedInstanceState != null)
        this.kaza = savedInstanceState.getString("kaza");

    View view = inflater.inflate(R.layout.activity_home, container, false);

    //Construction de l'ImageView
    FrameLayout frameLayout = (FrameLayout) getActivity().findViewById(R.id.PhotoPrincipale);
    FrameLayout.LayoutParams layoutparams=new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
    frameLayout.setLayoutParams(layoutparams);
    ImageView v = new ImageView(getActivity());

    //Récupération des IDS des kazas
    try {
        ListsID = ReadData(context);
    } catch (FileNotFoundException e){
        e.printStackTrace();
    }
    String iduser = (String) ListsID.get(0);
    String token = (String) ListsID.get(1);
    String idkaza = (String) ListsID.get(2);

    RecupPhotos(iduser, token, idkaza);

    for (int j = 0; j < URLBig.size(); j++) {
        new DownloadImageTask(v).execute(URLBig.get(j));
        frameLayout.addView(v,j);
    }

    return frameLayout;
}

我的活动

public class FragmentChangeActivity extends BaseActivity {

private Fragment mContent;

public FragmentChangeActivity() {
    super(R.string.changing_fragments);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // set the Above View
    if (savedInstanceState != null)
        mContent = getSupportFragmentManager().getFragment(savedInstanceState, "mContent");
    if (mContent == null)
        mContent = new KazaFragment("Gambetta");    

    System.out.println(mContent);

    // set the Above View
    setContentView(R.layout.activity_home);
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.PhotoPrincipale, mContent)
    .commit();

    // set the Behind View
    setBehindContentView(R.layout.menu_frame);
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.menu_frame, new ColorMenuFragment())
    .commit();

    // customize the SlidingMenu
    getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    getSupportFragmentManager().putFragment(outState, "mContent", mContent);
}

public void switchContent(Fragment fragment) {
    mContent = fragment;
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame, fragment)
    .commit();
    getSlidingMenu().showContent();
}

}

和我的 xml

<RelativeLayout 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"
tools:context=".HomeActivity" >

<ImageButton
    android:id="@+id/Actu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@android:color/transparent"
    android:cropToPadding="false"
    android:src="@drawable/actu" />

<ImageButton
    android:id="@+id/PagePhotos"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_toStartOf="@id/Actu"
    android:background="@android:color/transparent"
    android:cropToPadding="false"
    android:src="@drawable/photos" />

<FrameLayout
    android:id="@+id/PhotoPrincipale"
    android:layout_width="fill_parent"
    android:layout_height="250dp"
    android:layout_below="@+id/Actu"
    android:layout_margin="2dp"
    android:background="@drawable/shapeinscription"
    android:padding="2dp" />

所以,我搜索在 FrameLaout“PhotoPrincipale”中显示 5 张图片,一张在一张下方 但总是同样的错误。

指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()

我完全迷路了:(。

非常感谢您的帮助

07-30 14:29:28.122:E/AndroidRuntime(7548):致命异常:主要 07-30 14:29:28.122: E/AndroidRuntime(7548): java.lang.RuntimeException:无法启动活动 组件信息{com.jeremyfeinstein.slidingmenu.example/com.jeremyfeinstein.slidingmenu.example.fragments.FragmentChangeActivity}: java.lang.IllegalStateException:指定的孩子已经有一个 父母。您必须首先在孩子的父母上调用 removeView()。 07-30 14:29:28.122:E/AndroidRuntime(7548):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.app.ActivityThread.access$600(ActivityThread.java:153) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.os.Handler.dispatchMessage(Handler.java:99) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 android.os.Looper.loop(Looper.java:137) 07-30 14:29:28.122: E/AndroidRuntime(7548):在 android.app.ActivityThread.main(ActivityThread.java:5227) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 java.lang.reflect.Method.invokeNative(Native Method) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 java.lang.reflect.Method.invoke(Method.java:511) 07-30 14:29:28.122: E/AndroidRuntime(7548):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 dalvik.system.NativeStart.main(本机方法)07-30 14:29:28.122: E/AndroidRuntime(7548):引起:java.lang.IllegalStateException: 指定的孩子已经有一个父母。您必须调用 removeView() 首先在孩子的父母身上。 07-30 14:29:28.122: E/AndroidRuntime(7548):在 android.view.ViewGroup.addViewInner(ViewGroup.java:3339) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 android.view.ViewGroup.addView(ViewGroup.java:3210) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 android.view.ViewGroup.addView(ViewGroup.java:3155) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 android.view.ViewGroup.addView(ViewGroup.java:3131) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:874) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:505) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1164) 07-30 14:29:28.122: E/AndroidRuntime(7548): 在 android.app.Activity.performStart(Activity.java:5114) 07-30 14:29:28.122:E/AndroidRuntime(7548):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2271)

【问题讨论】:

  • 只是作为未来的提示:使用堆栈跟踪的代码样式而不是块引用。这种方式可读性更好...

标签: android android-layout android-fragments


【解决方案1】:

您正在添加 URLBig.size() 次相同的 ImageView。这是错误的,因为异常表明

for (int j = 0; j < URLBig.size(); j++) {
    ImageView v = new ImageView(getActivity());
    new DownloadImageTask(v).execute(URLBig.get(j));
    frameLayout.addView(v,j);
}

【讨论】:

  • 感谢您的帮助,但它不起作用更多:(。但是你是对的,我必须为每个 j 生成一个图像视图:D
  • 对不起我的英语不好。有了你的回答,同样的错误就会产生。
  • 发布完整的堆栈跟踪
  • 发布 FragmentChangeActivity,并使用堆栈跟踪删除答案
  • 避免发布答案!编辑您的问题
【解决方案2】:

修改

View view = inflater.inflate(R.layout.activity_home, container, false);

View view = inflater.inflate(R.layout.activity_home, null, false);

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2016-03-22
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多