我有这个代码,我想动态地添加CheckBoxes内的LinearLayout嵌套在一个ScrollView嵌套在一个RelativeLayout(RelativeLayout->ScrollView->LinearLayout->我的ChechBoxes)
li = (RelativeLayout) findViewById(R.id.mainlayout);
ScrollView sv = new ScrollView(this);
final LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
li.addView(sv);
sv.addView(ll);
for(int i = 0; i < 20; i++) {
CheckBox cb = new CheckBox(getApplicationContext());
cb.setText("I'm dynamic!");
ll.addView(cb);
}
this.setContentView(sv);
但是我得到这个错误:
03-12 20:32:14.840: E/AndroidRuntime(945): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
我的RelativeLayout已经在我的XML文件中声明了我怎样才能解决这个问题?
this.setContentView(sv);
这试图将你的ScrollView添加到框架布局android.R.id.content
,但你已经使li
的sv
的父…因此"指定的子节点已经有父节点"。
我相信你可以删除 ,因为它看起来像你只想添加ScrollView (et al.)到RelativeLayout,而不是取代整个现有的布局。this.setContentView(sv);
检查http://developer.android.com/training/animation/screen-slide.html下载样例应用程序时,请浏览LayoutChangesActivity.java
下面是添加项的代码…
private void addItem() {
// Instantiate a new "row" view.
final ViewGroup newView = (ViewGroup) LayoutInflater.from(this).inflate(
R.layout.list_item_example, mContainerView, false);
// Set the text in the new row to a random country.
((TextView) newView.findViewById(android.R.id.text1)).setText(
COUNTRIES[(int) (Math.random() * COUNTRIES.length)]);
// Set a click listener for the "X" button in the row that will remove the row.
newView.findViewById(R.id.delete_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Remove the row from its parent (the container view).
// Because mContainerView has android:animateLayoutChanges set to true,
// this removal is automatically animated.
mContainerView.removeView(newView);
// If there are no rows remaining, show the empty view.
if (mContainerView.getChildCount() == 0) {
findViewById(android.R.id.empty).setVisibility(View.VISIBLE);
}
}
});
// Because mContainerView has android:animateLayoutChanges set to true,
// adding this view is automatically animated.
mContainerView.addView(newView, 0);
}