带EditText的 AlertDialog 第二次点击报错,child already has a parent错误的解决办法(转)

转自  http://blog.csdn.net/yx0628/article/details/9419631

 

     最近在做一个小功能,即照片连拍的过程中,每拍一张弹出AlertDialog输入添加文本后,画成水印在照片上。过程中遇到了一个问题,即第一张照片添加完毕后,进入第二张拍照,点击拍照返回即报错,是AlertDialog的问题,log如下:

 

   (我自己的情况是里面有textview,用来编辑的,不过差不多的情况,也解决了)

 

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

 报错是这个

 

ad=new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
rl = (RelativeLayout) inflater.inflate(R.layout.basestation_photo_waterdialog, null);
mEtWaterMarker = (EditText)rl.findViewById(R.id.et_basestation_photo_wateret);
ad.setTitle("添加水印");
ad.setView(rl);
ad.setCancelable(false);
ad.setIcon(android.R.drawable.ic_dialog_alert);
ad.create();
ad.show();//显示对话框

改的代码是这个

 

我之前错误的代码是这样的

            if (v.getId() == R.id.ansButton) {
                layout = lftr.inflate(R.layout.dialog_answer, null);
                DialogUtil.showAnswerDialog(OptionsActivity.this, layout, ls);
                
            }

 

    public static void showAnswerDialog(Context ctx,View view,OnClickListener listener){

        
        AlertDialog.Builder buidler = new AlertDialog.Builder(ctx);
        buidler.setView(view).setPositiveButton("提交", listener);
        buidler.setNegativeButton("取消",null);
        buidler.create().show();
    }

第二次点击就会报错,原因是每次的layout 是用来布局的layout,但是通过builder设置了以后就不再是原来的layout了,要重新获取

我猜是这样的………………

可能是内部setView添加了父对象,但是我inflate的时候没有带父对象,这样再次点击的时候就认为父布局不是同一个了。

posted @ 2014-02-25 16:56  ggaaooppeenngg  阅读(1380)  评论(0编辑  收藏  举报