Android 安卓:can';不要用另一个片段替换一个片段

Android 安卓:can';不要用另一个片段替换一个片段,android,replace,android-fragments,Android,Replace,Android Fragments,我需要将一个活动中的片段替换为另一个片段,下面是活动的层文件: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/h

我需要将一个
活动
中的
片段
替换为另一个
片段
,下面是
活动
的层文件:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:id="@+id/home_layout_container">

    <fragment android:name="com.foo.FragA"
        android:id="@+id/home_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    </FrameLayout>
但我有个例外:

>6:24:40.685: ERROR/AndroidRuntime(9194): Uncaught handler: thread main exiting due to uncaught exception
05-06 16:24:40.692: ERROR/AndroidRuntime(9194): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.view.ViewGroup.addViewInner(ViewGroup.java:1857)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.view.ViewGroup.addView(ViewGroup.java:1752)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.view.ViewGroup.addView(ViewGroup.java:1709)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.view.ViewGroup.addView(ViewGroup.java:1689)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:743)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:933)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:578)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1219)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:380)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.os.Handler.handleCallback(Handler.java:587)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.os.Looper.loop(Looper.java:123)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at android.app.ActivityThread.main(ActivityThread.java:4363)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at java.lang.reflect.Method.invokeNative(Native Method)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at java.lang.reflect.Method.invoke(Method.java:521)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-06 16:24:40.692: ERROR/AndroidRuntime(9194):     at dalvik.system.NativeStart.main(Native Method)
我能做什么


谢谢

不能替换布局文件中静态定义的片段。您只能替换通过
FragmentTransaction

动态添加的片段。尝试
commit()
在ft结束时,您需要
commit()
您的更改才能让它知道

getFragmentManger()
  .beginTransaction
  .replace(R.id.frame,Yourfragment.newInstance(),null)
  .addtobackstack
  .commit();

人们总是说我是一行程序,所以这里为您提供一行程序解决方案

很抱歉,我犯了一个错误,我没有在代码中遗漏ft.commit(),并出现了上述异常。此视频演示了如何完成此操作:谢谢,我将尝试以编程方式添加它们。有人能提供一个链接来显示正确的方法吗?谢谢。@James-看一看地图。查看“或,以编程方式将片段添加到现有视图组”下的代码段。为什么动态添加的片段会在一段时间内重叠?此注释为真。将片段创建更改为远离静态xml声明,并使用FragmentTransaction添加它。另外,当使用FragmentTransaction替换片段时,请确保使用包含片段的容器作为替换()的第一个参数,而不是传递实际片段的id。请参阅@peterajtai提供的链接中的“执行片段事务”部分抱歉,需要滚动查看一行代码,因此我编辑了此项在androidx中无效
getFragmentManger()
  .beginTransaction
  .replace(R.id.frame,Yourfragment.newInstance(),null)
  .addtobackstack
  .commit();