如何通过按钮单击添加和删除线性布局

时间:2012-06-21 05:31:44

标签: android android-linearlayout

我正在尝试使用两个按钮动态添加和删除线性布局。

    protected void createT () {
    // -----------------------------------------------
    count++;
    LinearLayout temp_ll, frame;
    frame = new LinearLayout(this);
    frame.setOrientation(LinearLayout.VERTICAL);
    frame.setId(count);
    EditText temp1, temp2;

    for (int i=0; i<numClass; i++) {

        temp_ll = new LinearLayout(this);
        temp_ll.setOrientation(LinearLayout.HORIZONTAL);

        temp1 = new EditText(this);
        temp2 = new EditText(this);
        temp2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
        temp1.setHint("class name");
        temp2.setHint("grade");

        temp_ll.addView(temp1);
        temp_ll.addView(temp2);
        frame.addView(temp_ll);
    }

    ll.addView(frame);
}

protected void deleteT() {
    // --------------------------------------
    if (count > 0) {
                    LinearLayout temp = new LinearLyout(this);
        temp = (LinearLayout) findViewById(count);
        temp.removeAllViews();
        temp.setVisibility(View.GONE);
        count--;
    }
}
  • 每次按添加按钮,都会调用createT()
  • 每次按 del 按钮,都会调用deleteT()

问题在于我使用 count 变量来跟踪linearLayout ID。
我第一次按添加按钮 x 次,然后按 del 按钮一切正常。

问题是在第二次按 ADD 之后。

1 个答案:

答案 0 :(得分:4)

我检查了你的代码,我在deleteT()方法中发现了一个小错误,你删除了LinearLayout中的所有视图,但是你没有从根布局中删除实际的布局。

另一个建议是,当您想使用findviewbyid方法时,不需要新的LinearLayout实例,并使用ll.removeView(View)方法删除动态LinearLayout容器。

以下是代码:

private int count;
private LinearLayout ll;
private final int numClass = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ll = (LinearLayout) findViewById(R.id.main_linearlayout);
}

public void createT(View view) {
    count++;
    final LinearLayout frame = new LinearLayout(this);
    frame.setOrientation(LinearLayout.VERTICAL);
    frame.setId(count);

    for (int i = 0; i < numClass; i++) {
        final LinearLayout temp_ll = new LinearLayout(this);

        final EditText temp1;
        final EditText temp2;
        temp_ll.setOrientation(LinearLayout.HORIZONTAL);

        temp1 = new EditText(this);
        temp2 = new EditText(this);
        temp2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
        temp1.setHint("class name");
        temp2.setHint("grade");

        temp_ll.addView(temp1);
        temp_ll.addView(temp2);
        frame.addView(temp_ll);
    }
    ll.addView(frame);

}

public void deleteT(View view) {
    if (count > 0) {
        final LinearLayout temp = (LinearLayout) ll.findViewById(count);
        temp.removeAllViews();
        ll.removeView(temp);
        count--;
    }
}

布局xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    android:id="@+id/main_linearlayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="add"
        android:onClick="createT" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="delete"
        android:onClick="deleteT" />

</LinearLayout>

我希望它有所帮助!