Tengo una clase para crear el diálogo y la codificación para obtener los valores de la misma. funciona bien para uno. y cuando trato de llamar al cuadro de diálogo por segunda vez, pasa el siguiente mensaje de error.El hijo especificado ya tiene un padre. Debe llamar a removeView() en el padre del hijo primero
: java.lang.IllegalStateException: El elemento especificado ya tiene un elemento primario. Primero debe llamar a removeView() en el padre del niño.
¿Puede decirme cómo quitar el removeView()?
aquí está el código para la clase;
package com.util;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.widget.EditText;
/**
* helper for Prompt-Dialog creation
*/
public abstract class PromptDialog extends AlertDialog.Builder implements OnClickListener {
private final EditText input;
/**
* @param context
* @param title resource id
* @param message resource id
*/
public PromptDialog(Context context, int title, int message) {
super(context);
setTitle(title);
//:TODO Display msg only if not empty
//setMessage(message);
input = new EditText(context);
setView(input);
setPositiveButton("ok", this);
setNegativeButton("cancel", this);
}
/**
* will be called when "cancel" pressed.
* closes the dialog.
* can be overridden.
* @param dialog
*/
public void onCancelClicked(DialogInterface dialog) {
dialog.dismiss();
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
if (onOkClicked(input.getText().toString())) {
dialog.dismiss();
}
} else {
onCancelClicked(dialog);
}
}
/**
* called when "ok" pressed.
* @param input
* @return true, if the dialog should be closed. false, if not.
*/
abstract public boolean onOkClicked(String input);
}
y aquí está el código que llamo la instancia de la clase;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final PromptDialog dlgName = new PromptDialog(this, R.string.enterName, R.string.enter_comment) {
@Override
public boolean onOkClicked(String input) {
// do something
mName = input;
save();
//end do some thing
return true; // true = close dialog
}
};
mTxtShiftName = (TextView) findViewById(R.id.shiftname);
mTxtShiftName.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dlgName.show();
}
});
¿Está llamando al constructor de diálogo nuevamente en su segundo intento? –
Toda la codificación que estoy usando está copiada en mi pregunta. Creo que esa podría ser la razón. pero no sé cómo evitar esto? – SAN
No llame al constructor dos veces cuando hace clic en el botón. Cree su cuadro de diálogo una vez en 'onCreate' con su constructor Dialog o' onPrepareDailog' con solo un código y luego simplemente llame a dialog.show() cuando quiera mostrarlo. –