Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向布局中添加片段_Java_Android_Android Fragments - Fatal编程技术网

Java 向布局中添加片段

Java 向布局中添加片段,java,android,android-fragments,Java,Android,Android Fragments,我正在努力使我的应用程序更加平板电脑友好,因此我正在尝试学习一些片段。我想要典型的双窗格布局,左侧是“导航”,单击其中一个元素,它会更改右侧的片段 我可以复制左侧使用ListFragment的教程,如果单击其中一个,它会更新右侧的“详细信息”片段 我已经尽了最大努力来复制代码,只需使用LinearLayout,左侧有按钮,这样,如果单击按钮,它会在右侧加载相应的片段,但它不起作用。 当我提交FragmentTransaction时,我得到java.lang.IllegalStateExcepti

我正在努力使我的应用程序更加平板电脑友好,因此我正在尝试学习一些片段。我想要典型的双窗格布局,左侧是“导航”,单击其中一个元素,它会更改右侧的片段

我可以复制左侧使用ListFragment的教程,如果单击其中一个,它会更新右侧的“详细信息”片段

我已经尽了最大努力来复制代码,只需使用LinearLayout,左侧有按钮,这样,如果单击按钮,它会在右侧加载相应的片段,但它不起作用。 当我提交FragmentTransaction时,我得到
java.lang.IllegalStateException:指定的子级已经有了父级。您必须首先对孩子的家长调用removeView()。
孩子的家长是什么,为什么我必须对其调用removeView

我试图将片段加载到FrameLayout中,但我也尝试替换布局中的另一个片段,但仍然会出现错误

理想情况下,我希望左边的片段占据整个屏幕,直到按下一个按钮,这个按钮需要一个片段从左边进入,但我想一次只会出现一个问题

代码 主要活动 选择器片段(左侧) 细节碎片 main.xml
对布局xml文件进行充气时,不要指定父视图。不指定将这个膨胀的视图放在何处听起来非常违反直觉,但它可以工作

因此,例如,在SelectorFragment中更改行:

View fragment = inflater.inflate(R.layout.selector, container);

甚至更好

View fragment = inflater.inflate(R.layout.selector, container, false);

不要忘了在DetailsFragment中也执行同样的操作。

在片段的getView方法中展开布局时,必须使用下一个展开方法: 充气机。充气(右布局。详细信息,容器,错误


关键是第三个参数。不将充气布局附加到容器上一定是错误的,因为系统已经这样做了。如果为真或未指示,将创建冗余组视图。

Ah-hah!我再也不用把头撞在墙上了!非常感谢,这很有效!在上面的代码中,布局xml文件返回一个视图。这是一个LinearLayout,与一些textview或webview类似的东西相对应。如果以类似LinearLayout的方式创建视图,则ll=新建LinearLayout(此);在某个方法中,调用该方法并获取为视图。那么,如何使此布局膨胀。?
public class DetailsFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        return inflater.inflate(R.layout.details, container);
    }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <fragment class="com.coreno.testfragment.SelectorFragment"
        android:id="@+id/select"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:layout_weight="1"
        />

    <fragment class="com.coreno.testfragment.DetailsFragment"
        android:id="@+id/detail_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:layout_weight="2"
        />
    <!-- 
    <FrameLayout
        android:id="@+id/detail_holder" 
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="2"
        />
 -->
</LinearLayout>
View fragment = inflater.inflate(R.layout.selector, container);
View fragment = inflater.inflate(R.layout.selector, null);
View fragment = inflater.inflate(R.layout.selector, container, false);