java dialog - 指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/37456215/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 02:31:20  来源:igfitidea点击:

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

javaandroid

提问by Blaze

After a check demanding the user to switch on internet services and I try to click on a button my app crashes with the error message

在检查要求用户打开互联网服务后,我尝试单击一个按钮,我的应用程序崩溃并显示错误消息

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

On this line it crashes, I have tried doing this but not resolved absolutely

在这条线上它崩溃了,我试过这样做但没有绝对解决

if(alert.getContext() != null){
            alert.show();
        }

This is the complete code

这是完整的代码

else if (id == R.id.xyz) {

            //startActivity(borrowIntent);
            AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
            alert.setTitle("xyz");
            input.setFilters(new InputFilter[] {
                    // Maximum 2 characters.
                    new InputFilter.LengthFilter(6),
                    // Digits only.
                    DigitsKeyListener.getInstance(), 
                });
            // Digits only & use numeric soft-keyboard.
            input.setKeyListener(DigitsKeyListener.getInstance());
            input.setHint("xyz");
            alert.setView(input);
            alert.setPositiveButton("Borrow", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                if(input.getText().length() == 0)
                {
                    input.setError("xyz is required !");
                }
                else
                {

                   if(isNetworkAvailable())
                      {
                         xyz( input.getText().toString());

                      }else{

                            //setContentView(R.layout.main);

                            AlertDialog.Builder builder = new AlertDialog.Builder(
                                    MainActivity.this);
                              builder.setCancelable(false);
                              builder.setTitle("xyz");
                              builder.setMessage("Please enable wifi services");
                              builder.setInverseBackgroundForced(true);
                              builder.setPositiveButton("Ok",
                                      new DialogInterface.OnClickListener() {
                                          @Override
                                          public void onClick(DialogInterface dialog,
                                                  int which) {

                                              startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);
                                              dialog.dismiss();


                                          }
                                      });
                              AlertDialog alerts = builder.create();
                              alerts.show();
                           }//end of block

                        }
              }
            });
            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int whichButton) {
                // Canceled.
              }
            });
            if(alert.getContext() != null){
            alert.show(); //crashes at this line
            }
        }

Please what am I missing?

请问我错过了什么?

回答by dieter_h

The problem is on this line: alert.setView(input);You added inputViewthat have already parent. Create new inputinstance.

问题出在这一行: alert.setView(input);inputView已经添加了parent. 创建新input实例。

回答by Xianwei

according to this post, add this check to remove input from it's parent and readd it:

根据这篇文章,添加此检查以从其父项中删除输入并读取它:

if(input.getParent()!=null)
        ((ViewGroup)input.getParent()).removeView(input); // <- fix
    alert.addView(input);

回答by mdDroid

Put following line

放置以下行

 final AlertDialog alertd = alert.create();

After

 AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);