3

我使用一個自定義AlertDialog爲我的項目,並調用removeView(),當我嘗試以顯示它它告訴我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上看過很多帖子,但似乎沒有人能解決我的問題。 希望有人能幫助我。

回答

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

+0

但我需要讓我的自定義佈局。 .. – Luca 2014-09-03 13:35:45

+0

看看http://androidexample.com/Custom_Dialog_-_Android_Example/index.php?view=article_discription&aid=88&aaid=111 – 2014-09-03 13:37:30

+0

這就像我做的...在那個鏈接中他使用了一個按鈕,在我的代碼中使用內置的對話框按鈕,我們做同樣的事情。 – Luca 2014-09-03 13:46:18

0

我有同樣的問題,因爲這 第i設置視圖值創建

alertlog之前

LayoutInflater充氣= 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(新View.OnClickListener(){ 公共無效的onClick(視圖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(); 
     } 
    }); 
相關問題