自定义对话框 - 您必须首先在子项的父级上调用removeView()

3

我正在为我的项目使用自定义AlertDialog,当我尝试第二次显示它时,它告诉我java.lang.IllegalStateException:指定的子项已经有父项。您必须首先调用子项的父项上的removeView()。

在我的活动的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();

第一次显示此信息对话框时,它可以正常工作,但第二次会出现IllegalStateException。我已经阅读了StackOverflow上的很多其他帖子,但似乎没有人能解决我的问题。希望有人能帮助我。
2个回答

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
@Luca,根据自定义对话框,我更新了我的答案,请看一下。希望能有所帮助。 - Husnain Ali
尝试使用这个自定义对话框,它是我在项目中使用的:QustomDialog - Luca
1
@Luca,你的问题只是因为你只调用了infoDialog.show();,但你应该把它放在一个函数中,就像我做的那样,并传递消息字符串并每次调用该函数,你的问题将得到解决。 - Husnain Ali
显示剩余2条评论

0

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


LayoutInflater inflater = Primera.this.getLayoutInflater();

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) {

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();
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接