簡體   English   中英

自定義對話框 - 您必須首先在孩子的父母上調用removeView()

[英]Custom Dialog - You must call removeView() on the child's parent first

我正在為我的項目使用自定義AlertDialog,當我第二次嘗試顯示它時,它告訴我java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 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上閱讀了很多帖子,但似乎沒有人能解決我的問題。 希望可以有人幫幫我。

您可以使用下面的功能,然后在要顯示警報時調用此功能。

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

我有同樣的問題,因為我在創建alertlog之前設置了視圖值


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM