Java 向线性布局添加视图
我有垂直滚动视图,我将在按钮点击后添加一些视图。下面是滚动视图的xmlJava 向线性布局添加视图,java,android,xml,android-layout,Java,Android,Xml,Android Layout,我有垂直滚动视图,我将在按钮点击后添加一些视图。下面是滚动视图的xml <ScrollView android:background = "@drawable/border" android:layout_weight="31" android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="0dp" > <Line
<ScrollView
android:background = "@drawable/border"
android:layout_weight="31"
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp" >
<LinearLayout
android:id="@+id/layoutScroll"
android:padding = "10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/layoutContainer"
android:padding="5dp"
android:orientation="vertical"
android:background="@drawable/border_2"
android:layout_width="fill_parent"
android:layout_height = "wrap_content">
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_height = "wrap_content"
android:layout_width = "fill_parent">
<TextView
android:id="@+id/textWord"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/word"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textNumber"
android:background = "@drawable/border_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text=" 1 "
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
<EditText
android:id="@+id/editWord"
android:layout_marginTop="3dp"
android:layout_gravity="left"
android:inputType="text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lines="1"
android:scrollbars="horizontal"/>
<TextView
android:id="@+id/textDefinition"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text = "@string/definition" />
<EditText
android:id="@+id/editDefinition"
android:gravity="top|left"
android:inputType="textMultiLine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lines="3"
android:maxLines="3"
android:scrollbars="vertical"/>
</LinearLayout>
<TextView
android:id="@+id/textEmpty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:lines="1"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
</ScrollView>
然后我像这样将它们添加到布局中
public void onCLick_Add(View v){
layoutScroll.addView(layoutContainer);
layoutScroll.addView(textEmpty);
}
问题是它只工作一次。当我第二次单击按钮时,应用程序崩溃。
提前感谢。出现问题的原因是
滚动视图只能在子视图上显示。换句话说,ScrollView
可以有LinearLayout
或RelativeLayout
或TextView
等。更新您的代码,以便在LinearLayout
内添加新的视图(layoutScroll),而不是ScrollView
您的日志显示:
Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
在多次单击时,您试图多次添加相同的layoutContainer和textEmpty。此操作失败,因为它们已被添加,因此已具有父级。(不能将同一视图添加到多个父视图)
解决方案
我猜您希望在每次按下按钮时创建一个新视图,并将其添加到布局滚动中。每次单击都应再次调用init方法:
public void onCLick_Add(View v){
initInterface();
layoutScroll.addView(layoutContainer);
layoutScroll.addView(textEmpty);
}
我还建议将initInterface()划分为:
确保将scrollView的初始化放在外部(例如onCreate),并在createLayoutContainer()中声明类似于layoutContainer localy的视图,而不是全局视图
下面是它的外观片段:
private View createLayoutContainer(){
LinearLayout layoutContainer = new LinearLayout(getApplicationContext());
RelativeLayout relativeLayout = new RelativeLayout(getApplicationContext());
TextView textWord = new TextView(getApplicationContext());
...
return layoutContainer;
}
public void onCLick_Add(View v){
layoutScroll.addView(createLayoutContainer());
layoutScroll.addView(createTextEmptyView());
}
正如我在评论中指出的,错误是这样的:,原因是:java.lang.IllegalStateException:指定的子级已经有了父级。必须首先对孩子的家长调用removeView()。
这类错误的清单
正如这篇文章所指出的
仔细检查所有addView调用
- 确保不再添加任何视图一次。当视图准备就绪时
已使用(例如,您使用findViewById获取它,不要在其上使用addView
- 如果要添加视图,请将addView与新视图一起使用。您可以添加
这些新视图中的几个视图被添加到一个视图中,但不能添加该视图
查看多次
- 您不能仅仅通过更改某些视图来重用视图
你可以重复使用一个变量,但是如果需要,你需要创建一个新的视图
您想使用addView重新添加它
日志猫说了什么?我无法从日志中理解任何有用的东西。我已经保存了它。您可以在这里查看您的CreateSetActivity.javasetting文本中的第164行是什么,用于全局TexView对象textNumber.setText(“+wordCounter+”);
我注释掉了该行,但它仍在崩溃
private View createLayoutContainer();
private View createTextEmpty();
private View createLayoutContainer(){
LinearLayout layoutContainer = new LinearLayout(getApplicationContext());
RelativeLayout relativeLayout = new RelativeLayout(getApplicationContext());
TextView textWord = new TextView(getApplicationContext());
...
return layoutContainer;
}
public void onCLick_Add(View v){
layoutScroll.addView(createLayoutContainer());
layoutScroll.addView(createTextEmptyView());
}