1

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

    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()

问题是我正在使用计数变量来跟踪linearLayoutID。
第一次按x次添加按钮,然后按del按钮,一切都很好。

问题是按第二次添加后。

4

1 回答 1

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>

我希望它有帮助!

于 2012-06-21T06:35:27.840 回答