带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的时候没有带父对象,这样再次点击的时候就认为父布局不是同一个了。