AlertDialog异常The specified child already has a parent. ..解决方法

在学习AlertDialog对话框时,设置一个按钮,当点击按钮时显示对话框

button.setOnClickListener(new View.OnClickListener()
        {
            
            @Override
            public void onClick(View arg0)
            {
                timer = new Timer(true);
                textView.setText("10S后将发送信息");
                textView.setGravity(Gravity.CENTER);
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                
                builder.setTitle("title")
                        .setView(textView)    //为对话框添加View
                        .setCancelable(false)
                        .create();
                    
                    builder.setPositiveButton("ok", new DialogInterface.OnClickListener()
                    {
                        
                        @Override
                        public void onClick(DialogInterface arg0, int arg1)
                        {
                            // TODO Auto-generated method stub
                            ((ViewGroup) textView.getParent()).removeView(textView);//加入此句代码,则错误消失
                        }
                    });
                    builder.setNeutralButton("cancle", new DialogInterface.OnClickListener()
                    {
                        
                        @Override
                        public void onClick(DialogInterface arg0, int arg1)
                        {
                            // TODO Auto-generated method stub
                        }
                    });
                    dialog = builder.show();                
            }
        });
多次点击按钮显示对话框,会报以下错误:

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

如上述所示,在对话框“OK”按钮的实现方法中加入((ViewGroup) textView.getParent()).removeView(textView);则会消除错误。

出现此错误的根本问题是当前VIEW已经在别的View中,作为别的子View,而你现在又要将当前VIEW放在别的View中,就会抛出这类错误信息。解决方法是是先找到当前VIEW的父VIEW,在父VIEW中调用removeView(),移除当前VIEW,就可以解决此问题了。

你可能感兴趣的:(Android)