Android自定义Dialog二次调用报错解决方法:The specified child already has a parent. You must call removeView()
今天自定义了一个AlertDialog对话框,第一次点击时正常,但第二次调用时会出现错误:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
出错的代码为:
[java]
//窗口构造器
synchronized protected View GetTextEntryView() {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch (Dialog_TYPE) {
case DIALOG_TYPE_EXIT://退出对话框
return inflater.inflate(R.layout.datalist, null);
default:
break;
}
return null;
}
//窗口构造器
synchronized protected View GetTextEntryView() {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch (Dialog_TYPE) {
case DIALOG_TYPE_EXIT://退出对话框
return inflater.inflate(R.layout.datalist, null);
default:
break;
}
return null;
}而提示的大致意思是说为一个子视图指定了多个父视图。由此可以推断出,在第二次点击按钮弹出对话框时,子视图与第一次点击时的子视图是同一个对象,而父视图已经不再是同一个对象了。
解决方法非常简单,只需要重写对话框的show()方法即可:
[java]
@Override//重写show()方法
public AlertDialog show() {
//再次绑定View
setView(GetTextEntryView());
return super.show();
}
@Override//重写show()方法
public AlertDialog show() {
//再次绑定View
setView(GetTextEntryView());
return super.show();
}
补充:移动开发 , Android ,