【问题标题】:Custom Dialog - You must call removeView() on the child's parent first自定义对话框 - 您必须首先在孩子的父母上调用 removeView()
【发布时间】:2017-05-18 16:20:05
【问题描述】:

我正在为我的项目使用自定义 AlertDialog,当我第二次尝试显示它时,它告诉我 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

onCreate 我的活动中:

infoDialog = new QustomDialogBuilder(this);
infoDialog.setTitle("Attenzione");
infoDialog.setTitleColor(Constants.ANTINORI_LIGHT);
infoDialog.setDividerColor(Constants.ANTINORI_LIGHT);
infoDialog.setNeutralButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
    }
});

后来我用它作为 AsyncTask 的回复:

//DO STUFF
infoDialog.setMessage(loginResponse.getMessage());
infoDialog.show();

我第一次显示这个 infoDialog 时它工作正常,但第二次它给了我IllegalStateException

我在 StackOverflow 上阅读了很多其他帖子,但似乎没有人能解决我的问题。 希望有人可以帮助我。

【问题讨论】:

    标签: android android-dialog illegalstateexception customdialog


    【解决方案1】:

    你可以使用下面的函数,然后当你想显示警报时调用这个函数。

    private void showDialog(String message) {
        final Dialog dialog = new Dialog(CustomDialog.this);
        dialog.setContentView(R.layout.custom_alert);
        dialog.setTitle("Custom Dialog");
        TextView text = (TextView) dialog.findViewById(R.id.textDialog);
        text.setText(message);
        ImageView image = (ImageView) dialog.findViewById(R.id.imageDialog);
        dialog.show();
        Button declineButton = (Button) dialog.findViewById(R.id.declineButton);
        declineButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
    }
    

    并像这样调用这个函数showDialog(loginResponse.getMessage())

    【讨论】:

    • 这很像我做的......在那个链接中他使用了一个按钮,在我的代码中使用了内置的对话框按钮。我们做同样的事情。
    • @Luca 我根据自定义对话框更新了我的答案看看。我希望它会有所帮助。
    • 尝试使用这个customDialog,我在我的项目中使用的那个:QustomDialog
    • @Luca 你的问题只是因为你只是在调用infoDialog.show(); 但你应该像我一样把它放在一个函数中,并在每次你的问题得到解决时传递你的消息字符串和调用函数
    【解决方案2】:

    我有同样的问题,因为这个 我在创建警报日志之前设置了视图值


    LayoutInflater inflater = Primera.this.getLayoutInflater();

        view = inflater.inflate(R.layout.dialog,null);
    
        empezar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
    
                final AlertDialog.Builder builder = new AlertDialog.Builder(Primera.this);
                builder.setTitle(getResources().getString(R.string.dialog_codigo));
    
                builder.setView(view);
                builder.setPositiveButton(getResources().getString(R.string.dialog_aceptar), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        codigo = (EditText) view.findViewById(R.id.codigo);
                        ContentValues values = new ContentValues();
                        String valor;
                        valor = codigo.getText().toString();
                        values.put(Database.CODIGO_NOMBRE, valor);
                        mDbHelper.getWritableDatabase().insert(Database.TABLA_CODIGO, null, values);
    
                        if(codigo.getText().toString() == null || codigo.getText().toString().equals("")){
                            Toast.makeText( getApplicationContext(), "Codigo incorrecto" , Toast.LENGTH_SHORT ).show();
                        }
                        else
                        {
                            Toast.makeText( getApplicationContext(), "Codigo correcto" , Toast.LENGTH_SHORT ).show();
                            Intent intent = new Intent(Primera.this, Producto.class);
                            intent.putExtra("opcion",0);
                            intent.putExtra("primera",1);
                            startActivity(intent);
                        }
                    }
                });
                builder.setNegativeButton(getResources().getString(R.string.dialog_atras), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.dismiss();
                        dialog.cancel();
    
                    }
                });
                builder.create();
                builder.show();
            }
        });
    

    我在按钮内部设置了值视图,问题解决了。

    它的工作代码:


    empezar.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {

                final AlertDialog.Builder builder = new AlertDialog.Builder(Primera.this);
                builder.setTitle(getResources().getString(R.string.dialog_codigo));
                LayoutInflater inflater = Primera.this.getLayoutInflater();
                view = inflater.inflate(R.layout.dialog,null);
                builder.setView(view);
                builder.setPositiveButton(getResources().getString(R.string.dialog_aceptar), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        codigo = (EditText) view.findViewById(R.id.codigo);
                        ContentValues values = new ContentValues();
                        String valor;
                        valor = codigo.getText().toString();
                        values.put(Database.CODIGO_NOMBRE, valor);
                        mDbHelper.getWritableDatabase().insert(Database.TABLA_CODIGO, null, values);
    
                        if(codigo.getText().toString() == null || codigo.getText().toString().equals("")){
                            Toast.makeText( getApplicationContext(), "Codigo incorrecto" , Toast.LENGTH_SHORT ).show();
                        }
                        else
                        {
                            Toast.makeText( getApplicationContext(), "Codigo correcto" , Toast.LENGTH_SHORT ).show();
                            Intent intent = new Intent(Primera.this, Producto.class);
                            intent.putExtra("opcion",0);
                            intent.putExtra("primera",1);
                            startActivity(intent);
                        }
                    }
                });
                builder.setNegativeButton(getResources().getString(R.string.dialog_atras), new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.dismiss();
                        dialog.cancel();
    
                    }
                });
                builder.create();
                builder.show();
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2016-09-24
      • 2015-09-06
      • 1970-01-01
      • 2018-12-03
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多