2013-04-22 178 views
0

我越來越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

回答

1

創建您的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()); 
} 
1

如果您不止一次調用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

0

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

改爲創建動態EditText