removeView()对儿童的父母

问题描述:

我越来越removeView()对儿童的父母

E/AndroidRuntime(855): Caused by: java.lang.IllegalStateException: 
The specified child already has a parent. You must call removeView() 
on the child's parent first. 

我跑的代码,发生在linearLayout.addView(视图)的错误;

view = getFieldControl(field); 
linearLayout.addView(view); 

凡getFieldControl看起来像这样(简化):

private android.view.View getFieldControl(ControlTemplate control) 
{ 
    View view =null;  
    view = (EditText)findViewById(R.id.edit_message); 
    ((EditText) view).setHint(control.getName()); 
    ((EditText) view).setText(control.getValue()); 

return view; 
} 

我不明白的意见父可能是什么,我应该在哪里从中删除?

+0

其中您的R.id.edit_message存在吗? – 2013-04-22 13:19:40

+0

在设置为activity的contentView的线性布局中。 – Rickard 2013-04-22 13:20:51

+0

如果您将其设置为contentView,那么需要将它再次添加到布局中? – 2013-04-22 13:25:49

创建您的EditText程序如下

private android.widget.EditText getFieldControl(ControlTemplate control) 
{ 
    EditText edittext = new EditText(this); 
    edittext.setHint(control.getName()); 
    edittext.setText(control.getValue()); 
    return edittext; 
} 

注:如果EditText是在由因为已经EditText在添加删除线linearLayout.addView(view);如下设置为内容查看修改代码,XML通过XML进行布局。

EditText edittext = (EditText) findViewById(R.id.edit_message);; 
getFieldControl(edittext, field); 

private void getFieldControl(EditText edittext, ControlTemplate control) 
{ 
    edittext.setHint(control.getName()); 
    edittext.setText(control.getValue()); 
} 

如果您不止一次调用getFieldControl(field)方法,您试图从XML获取R.id.edit_message的EditText,并将多次添加到布局。因此它给出了这个错误。确保只将这个EditText添加到任何布局。

+0

有没有办法解决这个问题?我真的需要从xml中的同一个模板创建几个EditText。 – Rickard 2013-04-22 13:19:17

+1

然后,您必须动态创建新的编辑文本并将其添加到您的布局。不要从XML文件中获取它们。否则,请仅使用该编辑文本创建一个单独的布局,并在运行时充气。 – Kameswari 2013-04-22 13:21:12

EditTextR.id.edit_message必须在.xml文件或说layout,即layoutEditText的父。

改为创建动态EditText