单击时复制表单布局

时间:2014-07-30 10:43:43

标签: java android layout

我有一个表单,可以让用户选择添加更多字段来填充。用户通过单击按钮添加更多字段。单击该按钮时,它复制了一个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。

1 个答案:

答案 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}}