如何在其他布局中膨胀视图?
How to inflate view in other layout?
我必须创建一个包含框的水平滚动视图。每个盒子最多只能包含三个项目。所以我的逻辑是:
在水平滚动视图中创建框列表
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
<LinearLayout
android:id="@+id/ll_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
</HorizontalScrollView>
创建box.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
为项目(在框中)创建 item.xml
在Java
例如,有 7 件物品,所以我需要 3 个箱子。
这是我的代码,
public void initList(){
View box = getLayoutInflater().inflate(R.layout.box, null);
LinearLayout ll_box = (LinearLayout)box.findViewById(R.id.ll_box);
int item = 7;
int idx = item/3; //idx is a number of boxes
if (item%3!=0)
idx++;
for (int i=0; i<idx; i++ ){
for(int j=0; j<3; j++){
ll_box.addView(LayoutInflater.from(this).inflate(R.layout.item, null));
}
ll_list.addView(ll_box);
}
}
问题是我在
ll_list.addView(ll_box);
java.lang.IllegalStateException: 指定的child已经有一个parent。您必须先在 child 的 parent 上调用 removeView()。
如果你不明白问题请问我。我真的需要你的帮助。谢谢你。
您必须在每个步骤中创建一个新的 box
View
。
像这样:
for (int i=0; i<idx; i++ ){
View box = getLayoutInflater().inflate(R.layout.box, null);
LinearLayout ll_box = (LinearLayout)box.findViewById(R.id.ll_box);
for(int j=0; j<3; j++){
ll_box.addView(LayoutInflater.from(this).inflate(R.layout.item, null));
}
ll_list.addView(box); //here add `box` instead of `ll_box`!!
}
我必须创建一个包含框的水平滚动视图。每个盒子最多只能包含三个项目。所以我的逻辑是:
在水平滚动视图中创建框列表
<HorizontalScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:fillViewport="true"> <LinearLayout android:id="@+id/ll_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> </LinearLayout> </HorizontalScrollView>
创建box.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/ll_box" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </LinearLayout>
为项目(在框中)创建 item.xml
在Java 例如,有 7 件物品,所以我需要 3 个箱子。 这是我的代码,
public void initList(){
View box = getLayoutInflater().inflate(R.layout.box, null);
LinearLayout ll_box = (LinearLayout)box.findViewById(R.id.ll_box);
int item = 7;
int idx = item/3; //idx is a number of boxes
if (item%3!=0)
idx++;
for (int i=0; i<idx; i++ ){
for(int j=0; j<3; j++){
ll_box.addView(LayoutInflater.from(this).inflate(R.layout.item, null));
}
ll_list.addView(ll_box);
}
}
问题是我在 ll_list.addView(ll_box); java.lang.IllegalStateException: 指定的child已经有一个parent。您必须先在 child 的 parent 上调用 removeView()。
如果你不明白问题请问我。我真的需要你的帮助。谢谢你。
您必须在每个步骤中创建一个新的 box
View
。
像这样:
for (int i=0; i<idx; i++ ){
View box = getLayoutInflater().inflate(R.layout.box, null);
LinearLayout ll_box = (LinearLayout)box.findViewById(R.id.ll_box);
for(int j=0; j<3; j++){
ll_box.addView(LayoutInflater.from(this).inflate(R.layout.item, null));
}
ll_list.addView(box); //here add `box` instead of `ll_box`!!
}