Java 在DialogFragment中膨胀类片段时出错
我正在尝试创建一个包含listview的dialogfragment,我使用了这个问题的公认答案 但是当我试图打开“片段”对话框,应用程序崩溃时,我得到了一个膨胀类片段的Java 在DialogFragment中膨胀类片段时出错,java,android,android-fragments,android-fragmentactivity,android-dialogfragment,Java,Android,Android Fragments,Android Fragmentactivity,Android Dialogfragment,我正在尝试创建一个包含listview的dialogfragment,我使用了这个问题的公认答案 但是当我试图打开“片段”对话框,应用程序崩溃时,我得到了一个膨胀类片段的错误 下面是对话框\u fragment\u和\u list\u fragment布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
错误
下面是对话框\u fragment\u和\u list\u fragment
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/flContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding = "10dp"
class="com.OptimusApps.stayhealthy.AndroidXMLParsingActivity" />
</LinearLayout>
这就是我如何称呼dialogfragment的
public void onClick(View v) {
BodyDialogue dialogFragment = BodyDialogue.newInstance(1);
dialogFragment .setRetainInstance(true);
dialogFragment .show(getFragmentManager(), "bodydialogue");
}
这就是日志中的原因
08-17 19:43:15.702: E/AndroidRuntime(3605): Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f0a0031, tag null, or parent id 0x0 with another fragment for com.OptimusApps.stayhealthy.AndroidXMLParsingActivity
08-17 19:43:15.702: E/AndroidRuntime(3605): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285)
但当我试图打开时,我在膨胀类片段时遇到了一个错误
片段对话框和应用程序崩溃
之所以会发生这种情况,是因为您将已经包含另一个片段的布局(通过fragment
标记)用作BodyDialogue
片段的视图。这将失败,因为嵌套片段不允许从xml布局中膨胀,如前所述:
注意:当版面包含时,不能将版面膨胀为片段。嵌套片段仅在动态添加到片段时才受支持
因此,如果您想在BodyDialogue
对话框片段中嵌入AndroidXMLParsingActivity
(片段的糟糕命名btw),那么使用getChildFragmentManager()
在相同的onCreateView
回调中的代码中进行嵌入
但当我试图打开时,我在膨胀类片段时遇到了一个错误
片段对话框和应用程序崩溃
之所以会发生这种情况,是因为您将已经包含另一个片段的布局(通过fragment
标记)用作BodyDialogue
片段的视图。这将失败,因为嵌套片段不允许从xml布局中膨胀,如前所述:
注意:当版面包含时,不能将版面膨胀为片段。嵌套片段仅在动态添加到片段时才受支持
因此,如果您想在BodyDialogue
对话框片段中嵌入AndroidXMLParsingActivity
(片段的糟糕命名顺便说一句),那么使用getChildFragmentManager()
在相同的onCreateView
回调中的代码中进行嵌入,我使用这个简单易用的方法解决了我的问题
请参考此答案
我的代码使用上面的答案
@Override
public void onClick(View v) {
// TODO Auto-generated method
// stub
FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.remove(getFragmentManager().findFragmentByTag("one"));
ft2.commit();
dialog.dismiss();
}
我的xml
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="220dip"
android:tag="one"
android:layout_below="@+id/txtTargetStreet_hint"
android:layout_margin="20dip" />
我用这个简单易行的方法解决了我的问题
请参考此答案
我的代码使用上面的答案
@Override
public void onClick(View v) {
// TODO Auto-generated method
// stub
FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.remove(getFragmentManager().findFragmentByTag("one"));
ft2.commit();
dialog.dismiss();
}
我的xml
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="220dip"
android:tag="one"
android:layout_below="@+id/txtTargetStreet_hint"
android:layout_margin="20dip" />
是的,因为如果我调用它来替换一个片段,它看起来很好。就像我说的,这与片段无关,我已经在其他片段上测试过了,它们也不起作用,我添加了我的日志,我想你可能会找到解决问题的方法。请不要在你的问题标题前加上安卓或任何其他标签,底部的标签已经足够了。是的,因为如果我只是调用它来替换一个片段,它看起来很好。就像我说的,这与片段无关,我已经在其他片段上测试过了,它们也不起作用,我添加了我的日志,我想你可能会找到解决问题的方法。请不要在你的问题标题前加上安卓或任何其他标签,底部的标签已经足够了。你有这样的例子吗?@CamConnor如果你还没有自己制作,请看一看。+1“嵌套片段指南已经提到”。。。似乎你是唯一一个读过它的人:)在我读到这篇文章之前,你整夜都在和xmls+nestedfrags争吵。你有这样的例子吗?@CamConnor如果你还没有自己做出来,请看一看。+1“嵌套片段指南已经提到”。。。似乎你是唯一读过它的人:)在我读到这篇文章之前,你整夜都在和xmls+nestedfrags争吵。