我正在开发Android项目。我有一些问题,我不知道如何解决它。我发现了类似的主题,但建议的解决方案没有帮助。
单击按钮以获取Dialog(内置EditText)后,一切正常。但是当我第二次出现错误消息时。
java.lang.IllegalStateException:指定的子级已有父级。您必须首先在孩子的父母上调用removeView()。
private void MakeDescription()
{
try
{
DialogInterface.OnClickListener ConfirmProductClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
String url = txtDesc.getText().toString();
// txtDesc it's a EditText
break;
case DialogInterface.BUTTON_NEUTRAL:
dialog.cancel();
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getResources().getString(R.string.app_label3));
builder.setView(txtDesc).setPositiveButton(getResources().getString(R.string.app_labe1), // txtDesc it's a EditTextConfirmProductClickListener)
.setNeutralButton(getResources().getString(R.string.app_label2), ConfirmProductClickListener)
.show();
}
catch (Exception exc)
{
Log.e("ex", exc.toString());
}
}
答案 0 :(得分:2)
异常非常具体,txtDesc已经在View层次结构中 - 如果它已经存在于您的活动,片段或其他对话框中,则无法重复使用它。
一个选项是创建一个新的EditText视图:
try
{
final EditText editText = new EditText(this);
DialogInterface.OnClickListener ConfirmProductClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
String url = editText.getText().toString();
break;
case DialogInterface.BUTTON_NEUTRAL:
dialog.cancel();
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getResources().getString(R.string.app_label3));
builder.setView(editText).setPositiveButton(getResources().getString(R.string.app_labe1), // txtDesc it's a EditTextConfirmProductClickListener)
.setNeutralButton(getResources().getString(R.string.app_label2), ConfirmProductClickListener)
.show();
}
catch (Exception exc)
{
Log.e("ex", exc.toString());
}