I have the following code in an Activity that starts a dialog for a layout that contains a fragment.
...
case R.id.pick_resource:
dialog = new Dialog(this);
dialog.setContentView(R.layout.resource_picker);
dialog.setCancelable(true);
dialog.setTitle("Pick a resource");
dialog.show();
This works very well the first time after application start, but when the dialog is quit and later called again, I get this stack trace:
08-10 10:47:33.990: ERROR/AndroidRuntime(26521): FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #7: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:224)
at android.app.Dialog.setContentView(Dialog.java:449)
at org.rhq.pocket.StartActivity.onOptionsItemSelected(StartActivity.java:118)
at android.app.Activity.onMenuItemSelected(Activity.java:2390)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:852)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:956)
at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:174)
at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:85)
at android.view.View.performClick(View.java:3100)
at android.view.View$PerformClick.run(View.java:11644)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:126)
at android.app.ActivityThread.main(ActivityThread.java:3997)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f090007, tag null, or parent id 0xffffffff with another fragment for org.rhq.pocket.ResourcePickerFragement
at android.app.Activity.onCreateView(Activity.java:4089)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664)
... 24 more
Any idea, what may cause this exception? Do I have to unload the fragment somehow?
Another answer that could help someone else: I had a similar problem but instead of destroying the fragment in the onDestroy, I had to move it to onPause in order to get it to work:
Does the fragment in your layout have an android:id attribute?
I suspect this is because the fragment is instantiated each time your layout is inflated, the first time the ID isn't being used, but the second time the FragmentManager still thinks your Fragment is alive, so the ID is considered a duplicate.
Try removing the android:id attribute from your fragment if it exists, or add a placeholder layout such as a framelayout and use a fragmenttransaction to dynamically add the fragment each time your dialog is created.
I had a similar problem
I solved it very easy
deleting all fragments when close dialog
This is my dialog
and that's what happens when you delete a dialog
Try removing the android:id attribute from your fragment if it exists. and on dismiss dialog add the following code: it works for me
Try as follows
}
Maybe this can help someone:
I use the code of Эвансгелист Evansgelist, but with a DialogFragment that has a layout with a MapFragment, the code have to be onDestroy block:
This is my layout: