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