我正在以编程方式创建一个带按钮的复选框列表。为了更新目的,我需要在Button
方法中创建新复选框列表之前删除旧复选框列表和remove_elements
。如何在visibility
方法中将GONE
设置为remove_elements
?在当前状态下,始终添加任何复选框列表和按钮而不删除旧的。
代码:
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() {
}
}
答案 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()
- 方法