当前位置:操作系统 > 安卓/Android >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,