今天自訂了一個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();
}