Fragments - the specified child already has a parent. You must first call removeView () on the parent parent

I get this error. I tried many solutions, but I decided to solve this problem. Help me! I need to add a surface view and a button to the action using fragments.

CamActivity.java:

public class CamActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cam); FragmentManager fm = getSupportFragmentManager(); Fragment fragment = fm.findFragmentById(R.id.fragmentContainer); if(fragment == null) { fragment = new CamFragment(); fm.beginTransaction() .add(R.id.fragmentContainer, fragment) .commit(); } } } 

CamFragment.java:

 public class CamFragment extends Fragment { private static final String TAG = "CamFragment"; private Camera mCamera; private SurfaceView mSurfaceView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){ View v = inflater.inflate(R.layout.camera_fragment, parent); Button capturePic = (Button)v.findViewById(R.id.img_capture); capturePic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().finish(); } }); mSurfaceView = (SurfaceView)v.findViewById(R.id.surfaceView1); return v; } } 

Mistake:

 04-18 13:24:12.735: E/AndroidRuntime(6321): FATAL EXCEPTION: main 04-18 13:24:12.735: E/AndroidRuntime(6321): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pack.camdictionary/com.pack.camdictionary.CamActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child parent first. 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1728) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1747) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.app.ActivityThread.access$1500(ActivityThread.java:155) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.os.Handler.dispatchMessage(Handler.java:130) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.os.Looper.loop(SourceFile:351) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.app.ActivityThread.main(ActivityThread.java:3814) 04-18 13:24:12.735: E/AndroidRuntime(6321): at java.lang.reflect.Method.invokeNative(Native Method) 04-18 13:24:12.735: E/AndroidRuntime(6321): at java.lang.reflect.Method.invoke(Method.java:538) 04-18 13:24:12.735: E/AndroidRuntime(6321): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 04-18 13:24:12.735: E/AndroidRuntime(6321): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:659) 04-18 13:24:12.735: E/AndroidRuntime(6321): at dalvik.system.NativeStart.main(Native Method) 04-18 13:24:12.735: E/AndroidRuntime(6321): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child parent first. 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.view.ViewGroup.addViewInner(ViewGroup.java:2007) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.view.ViewGroup.addView(ViewGroup.java:1902) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.view.ViewGroup.addView(ViewGroup.java:1859) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.view.ViewGroup.addView(ViewGroup.java:1839) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:931) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1166) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.app.Activity.performStart(Activity.java:3837) 04-18 13:24:12.735: E/AndroidRuntime(6321): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1701) 04-18 13:24:12.735: E/AndroidRuntime(6321): ... 11 more 
+69
android android-fragments surfaceview
Apr 18 '14 at 8:02
source share
4 answers

Try replacing

 View v = inflater.inflate(R.layout.camera_fragment, parent); 

FROM

 View v = inflater.inflate(R.layout.camera_fragment, parent, false); 

or

 View v = inflater.inflate(R.layout.camera_fragment, null); 
+183
Apr 18 '14 at 8:23
source share

This question has already been answered, but I would like to add a reason for adding false as the third parameter.

The inflate () method takes three arguments:

  • ID of the layout resource you want to inflate.
  • ViewGroup will be the parent of the bloated layout. Container passing is important for the system to apply layout settings to the root representation of the bloated layout specified by the parent view in which it occurs.
  • Boolean value indicating whether to include the inflation scheme in the ViewGroup (second parameter) during inflation. (In this case, this is not true, because the system already inserts the bloated layout into a container that passes true will create an excess group of views in the final layout.)

Source: http://developer.android.com/guide/components/fragments.html

+8
Jun 14 '15 at 13:59 on
source share

Specify an Id for the parent and child elements, especially for custom views, in the xml file can solve the problem.

0
Jul 28 '15 at 6:11
source share

try it.

  ((CamActivity)getActivity()).finish(); 
-fourteen
Apr 18 '14 at 8:12
source share



All Articles