[英]dialog - The specified child already has a parent. You must call removeView() on the child's parent first
[英]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.