将可见性设置为GONE

时间:2015-06-01 12:18:42

标签: android

我正在以编程方式创建一个带按钮的复选框列表。为了更新目的,我需要在Button方法中创建新复选框列表之前删除旧复选框列表和remove_elements。如何在visibility方法中将GONE设置为remove_elements?在当前状态下,始终添加任何复选框列表和按钮而不删除旧的。

MainActivity中的

代码:

ArrayList<Integer> items = new ArrayList<Integer>();
     LinearLayout ll;
    .
    .
    .
    .
    @Override
    public void onAsyncTaskFinished(ArrayList<Integer> result) {

        remove_elements();
        createCheckboxList(result);


    }

        private void remove_elements() {
        for (int i : items) {
            CheckBox ch = (CheckBox) findViewById(i);
            if (ch != null) {
                ch.setVisibility(View.GONE);
            } else {
                System.out.println("The checkbox is null");
            }

        }

        Button btn = (Button) findViewById(1);
        if (btn != null) {
            btn.setVisibility(View.GONE);
        } else {
            System.out.println("The button is null");
        }

    }
    private void createCheckboxList(final ArrayList<Integer> items) {
        this.items = items;
        final ArrayList<Integer> selected = new ArrayList<Integer>();

        ll = (LinearLayout) findViewById(R.id.lila);
        for (int i = 0; i < items.size(); i++) {
            CheckBox cb = new CheckBox(this);
            cb.setText(String.valueOf(items.get(i)));
            cb.setId(items.get(i));
            ll.addView(cb);

        }
        Button btn = new Button(this);
        btn.setLayoutParams(new LinearLayout.LayoutParams(500, 150));
        btn.setText("submit");
        btn.setId(1);
        ll.addView(btn);

        btn.setOnClickListener(new View.OnClickListener() {
    }
}

1 个答案:

答案 0 :(得分:1)

我记得setVisibility - 方法只会改变元素的显示方式。 View.GONE表示它不会占用布局中的任何空间,但它仍然存在。

要完全删除它,您必须首先获取包含元素的父布局,在您的示例中,我猜测它是ID为R.id.lila的布局,然后调用removeView

private void remove_elements() {
    LinearLayout parent = (LinearLayout) findViewById(R.id.lila);
    for (int i : items) {
        CheckBox ch = (CheckBox) findViewById(i);
        if (ch != null) {
            parent.removeView(ch);
        } else {
            System.out.println("The checkbox is null");
        }
    }

如果复选框是LinearLayout中的唯一视图,则还可以使用removeAllViews() - 方法