我有一个表单,可以让用户选择添加更多字段来填充。用户通过单击按钮添加更多字段。单击该按钮时,它复制了一个RelativeLayout,其中包含另一个RelativeLayout中的表单元素。
这是我尝试复制的形式
<RelativeLayout
android1:id="@+id/questionTemplate"
android1:layout_width="wrap_content"
android1:layout_height="60dp"
android1:layout_alignParentLeft="true"
android1:layout_below="@+id/TextView01"
>
<Button
android1:id="@+id/Button02"
android1:layout_width="75dp"
android1:layout_height="20dp"
android1:layout_alignParentBottom="true"
android1:layout_alignParentRight="true"
android1:background="@drawable/purplebutton"
android1:text="BROWSE"
android1:textColor="@drawable/button_text_color"
android1:textSize="10sp"
/>
<EditText
android1:id="@+id/EditText02"
android1:layout_width="match_parent"
android1:layout_height="25dp"
android1:layout_above="@+id/Button02"
android1:layout_alignParentLeft="true"
android1:background="@drawable/textlines"
android1:ems="10"
android1:hint="50 WORDS OR LESS"
android1:inputType="textMultiLine"
android1:paddingLeft="5dp"
>
<requestFocus />
</EditText>
<TextView
android1:id="@+id/TextView03"
android1:layout_width="wrap_content"
android1:layout_height="wrap_content"
android1:layout_alignParentBottom="true"
android1:layout_marginRight="19dp"
android1:layout_toLeftOf="@+id/Button02"
android1:text="ADD PICTURE OR VIDEO"
android1:textSize="10sp"
/>
</RelativeLayout>
它在另一个RelativeLayout里面,其id为&#34; questionsContainer&#34;。当用户点击ID为&#34; makeLayoutButton&#34;的按钮时它应该添加&#34; questionTemplate&#34;的另一个实例。低于另一个。
这是我在用户点击按钮
时所做的事情public void onClick(View v) {
Toast toast;
switch (v.getId()) {
case R.id.makeLayoutButton:
LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v1 = vi.inflate(R.layout.make_question, null);
// template to be copied
RelativeLayout target = (RelativeLayout) v1.findViewById(R.id.questionTemplate);
// insert into main view
RelativeLayout insertPoint = (RelativeLayout)findViewById(R.id.questionsContainer);
insertPoint.addView(target);
break;
}
}
但是它一直在崩溃,日志告诉我我需要先在父节点上调用removeView。但是,当我这样做时,它只是删除了容器的所有子项,并留下了一份表单副本而没有重复。关于我哪里出错的任何线索?我觉得它有什么可以做的ids。
答案 0 :(得分:1)
当然,输出是正确的。您正在尝试添加已存在的View
。您不能创建(复制)新的View
,而是使用findViewById()
方法使用现有的View
。
要创建实际的inflate()
,您应该使用RelativeLayout target = (RelativeLayout) v1.inflate(R.id.questionTemplate, null); // if v1 is container for this R.id.questionTemplate layout
方法:
{{1}}