我在一个 Activity 中有以下代码,它为包含片段的布局启动一个对话框.
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?
你的布局中的片段是否有 android:id 属性?
Does the fragment in your layout have an android:id attribute?
我怀疑这是因为每次布局膨胀时都会实例化片段,第一次没有使用 ID,但第二次 FragmentManager 仍然认为您的 Fragment 是活动的,因此 ID 被认为是重复的.
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.
尝试从片段中删除 android:id 属性(如果存在),或者添加一个占位符布局,例如 framelayout 并使用片段事务在每次创建对话框时动态添加片段.
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.
这篇关于第二次在对话框中膨胀片段时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!