0

我越来越

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);

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;
}

我不明白父级的视图可能是什么,我应该从哪里删除它?

4

3 回答 3

1

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

于 2013-04-22T13:16:05.560 回答
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是在设置为内容视图的 XML 中,则通过删除该行来修改以下代码,linearLayout.addView(view);因为已经EditText通过 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()); 
}
于 2013-04-22T13:22:06.427 回答
0

EditText R.id.edit_message必须在一个.xml文件中,或者说layout,那layoutEditText.

EditText而是创建一个动态。

于 2013-04-22T13:17:41.887 回答